মাইক্রোসফ্ট কনফিগার করুন। ব্যবহারকারী নাম হিসাবে ইমেল ঠিকানা মঞ্জুর করতে


121

আমি একটি নতুন অ্যাপ্লিকেশন তৈরির প্রক্রিয়াধীন এবং EF6-rc1, Microsoft.AspNet.Identity.Core 1.0.0-rc1, Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1, Microsoft.AspNet.Identity ব্যবহার করে শুরু করেছি .উইন 1.0.0-আরসি 1 ইত্যাদি এবং গতকাল আরটিএম রিলিজ সহ, আমি এগুলি সন্ধ্যায় নিউগেটের মাধ্যমে আরটিএম-তে আপডেট করেছি।

আমি এখন পর্যন্ত যে কাজ করেছি তার কয়েকটি কোড পরিবর্তন করা ছাড়াও, অ্যাপটির জন্য স্থানীয় ব্যবহারকারী অ্যাকাউন্ট তৈরি করার চেষ্টা না করা অবধি সমস্ত ঠিকঠাক হয়ে গেছে বলে মনে হচ্ছে।

আমি ই-মেইল ঠিকানাগুলিতে ব্যবহারকারীর নাম ফর্ম্যাট হিসাবে কাজ করছিলাম যা প্রকাশের প্রার্থীর সাথে দুর্দান্ত কাজ করেছে, কিন্তু এখন কোনও ব্যবহারকারীর জন্য ইমেল ঠিকানা সহ কোনও ব্যবহারকারী তৈরি করার সময় এটি নীচের বৈধতা ত্রুটিটি ছুঁড়ে দেয়:

ব্যবহারকারীর নাম xxxxx@xxxx.com অবৈধ, কেবলমাত্র অক্ষর বা সংখ্যা থাকতে পারে।

আমি এর জন্য কনফিগারেশন বিকল্পগুলির সমাধান বা ডকুমেন্টেশনের সন্ধান করতে শেষ ঘন্টা বা তার বেশি সময় ব্যয় করেছি, তবে কোনও ফলসই হয়নি।

ব্যবহারকারীর নামগুলির জন্য ইমেল ঠিকানাগুলিকে অনুমতি দেওয়ার জন্য কি এটি কনফিগার করতে পারি?


1
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;
আরভিস

উত্তর:


164

আপনি ব্যবহারকারী ম্যানেজারে নিজের ইউজারভালিডেটার প্লাগ করে বা কেবল এটি ডিফল্ট বাস্তবায়ন বন্ধ করে অনুমতি দিতে পারেন:

UserManager.UserValidator = new UserValidator<TUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }

3
আপনি কীভাবে একটি কাস্টম ইউজারভালিডেটর তৈরি করবেন?
teh0wner

2
কোডটিতে ঠিক কোথায় (কোন ফাইল / পদ্ধতিতে) (একটি ডিফল্ট এমভিসি 5 অ্যাপে) আমি ইউজারম্যানেজার.উজারভালিডেটর = নতুন ইউজারভালিডেটর <TUser> (ইউজারম্যানেজার) {AllowOnlyAlphanumericUserNames = মিথ্যা}? ধন্যবাদ।
পুসইনবুটস

29
আপনার অ্যাকাউন্টকন্ট্রোলারে, public AccountController(UserManager<ApplicationUser> userManager)কনস্ট্রাক্টারে অ্যাড করুনUserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
লিয়ামগু

1
@ গ্রেক্রো আমি কীভাবে Asp.net সদস্যপদটি ব্যবহার করে কাজ করতে এবং সহজে ব্যবহার করা যায় সে সম্পর্কে রেটিং চালিয়ে যাচ্ছি। আমি এর জন্য ভিএস থেকে অ্যাক্সেসযোগ্য কনফিগারেশন ওয়েবসাইটটি ব্যবহার করে উপভোগ করেছি ..
দ্য মাফিন ম্যান

@ গ্রেক্রো এসপিএন পরিচয়ের বর্তমান অবস্থা দেখে আমি স্কেল মেম্বারশিপ সরবরাহকারীর দিনগুলির জন্য অপেক্ষা করি। আরও বৃহত্তর দৃষ্টিকোণের জন্য দেখুন: এসপি নেট পরিচয়ের উপর
ব্রোক্যালেন

16

এর সি # সংস্করণটি (অ্যাপ_কোড \ আইডেন্টিটি মডেলস সি তে)

public UserManager()
        : base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
    {
        UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }

9

আমার ক্ষেত্রে, ভিএস 2013 সি #, এমভিসি 5.2.2 এ চলছে, এএসপি.নেট আইডেন্টিটি ২.০ ব্যবহার করে সমাধানটি অ্যাপ্লিকেশন-স্টার্ট inside আইডেন্টিটি কনফিগ.সি.-এর ভিতরে অ্যাপ্লিকেশন-ব্যবহারকারী ম্যানেজারটি আপডেট করা ছিল:

public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
        this.UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }

5

আমার একই সমস্যা ছিল, যখন আমি ব্যবহারকারীর নামটি তৈরির কোডটি ব্যক্তির আসল নাম ছিল এবং ইমেলটি না করে সিস্টেমটি আমাকে একই ত্রুটি বার্তা দেখায় "ব্যবহারকারীর নাম এবিসি ডিএইফ অবৈধ, কেবলমাত্র অক্ষর বা সংখ্যা থাকতে পারে । " আমি স্পেস ক্যারেক্টারটি (আমার ক্ষেত্রে শেষে) মঞ্জুরিপ্রাপ্ত ইউজারনেমচার্যাক্টারে যুক্ত সমস্যাটি সমাধান করেছি।

আমি Asp.Net কোর 2.2 এবং VS2017 ব্যবহার করছি

এটি আমার কোড

স্টার্টআপ.cs এ যান এবং "// ব্যবহারকারীর সেটিংস" এর অধীনে লাইনটি সম্পাদনা করুন বা যুক্ত করুন:

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));

        services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = true;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 6;
            options.Password.RequiredUniqueChars = 1;

            // Lockout settings.
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Lockout.MaxFailedAccessAttempts = 5;
            options.Lockout.AllowedForNewUsers = true;


            // User settings.
            options.User.AllowedUserNameCharacters =
                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+ ";
            options.User.RequireUniqueEmail = false;
        });

        services.ConfigureApplicationCookie(options =>

4

আপনি যদি এএসপি.নেট ওয়েবফর্মগুলি ব্যবহার করছেন এবং এটি সম্পাদন করার চেষ্টা করছেন, কেবল আপনার আইডেন্টিটি মডেল.ভিবি / সিএস ফাইল এবং পাবলিক ক্লাসের ব্যবহারকারীম্যানেজারের অধীনে খুলুন, এটির মতো দেখতে হবে:

Public Class UserManager
Inherits UserManager(Of ApplicationUser)

Public Sub New()
    MyBase.New(New UserStore(Of ApplicationUser)(New ApplicationDbContext()))
    Users = store
    UserValidator = New UserValidator(Of ApplicationUser)(Me) With {.AllowOnlyAlphanumericUserNames = False}
End Sub

Public Property Users() As IUserStore(Of ApplicationUser)
    Get
        Return m_Users
    End Get
    Private Set(value As IUserStore(Of ApplicationUser))
        m_Users = value
    End Set
End Property
Private m_Users As IUserStore(Of ApplicationUser)

End Class

4

AspNet.Identity.Core 2.1 এবং এর উপরে থাকা লোকদের জন্য, ইউজারম্যানেজারে এই বৈধতা পঠনযোগ্য। ব্যবহারকারী নাম হিসাবে ইমেল ঠিকানাগুলি ডিফল্টরূপে অনুমোদিত হয় তবে আপনার যদি আপনার ব্যবহারকারীর নামগুলিতে অক্ষরগুলির আরও কাস্টমাইজেশন প্রয়োজন হয় তবে আপনি স্টার্টআপ.কে এগুলি করতে পারেন:

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity<ApplicationUser, IdentityRole>(options => {
        options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+/";
    });

    // ... etc
}

(উত্তরাধিকারসূত্রে আমার একটি '/' দরকার ছিল))


1

আমার নিজস্ব অ্যাপ্লিকেশন ব্যবহারকারীকে কোডিং করার পরে: ইউজারম্যানেজার ক্লাসটি আমার পক্ষে কাজ করেনি (সম্ভবত বিসি আমি রেজার পেজ ব্যবহার করি, এমভিসি নয়), এখানে আরও একটি সমাধান রয়েছে: কোডিগার সার্ভিসে স্টার্টআপ.সিগুলিতে () আপনি পরিচয় বিকল্পগুলি কনফিগার করতে পারেন, উদাহরণস্বরূপ:

services.Configure<IdentityOptions>(options =>
{
  options.User.AllowedUserNameCharacters = 
  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@";
  options.User.RequireUniqueEmail = true;
});

মাইক্রোসফ্ট ডক্সে এই বিষয় সম্পর্কে আরও: https://docs.microsoft.com/de-de/aspnet/core/security/authentication/identity-configration?view=aspnetcore-2.2


0

আপনি যদি আইডেন্টিটি কনফিগ.সিগুলি খুঁজে না পান তবে আপনার অ্যাকাউন্টকন্ট্রোলার কনস্ট্রাক্টরকে এই কোড দিয়ে প্রতিস্থাপন করুন।

public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) 
  {
      AllowOnlyAlphanumericUserNames = false  
  };
}

0

আমার ক্ষেত্রে আমার কাছে একটি সংগ্রহস্থল শ্রেণি ছিল যা প্রমাণীকরণের সাথে কাজ করছিল, যা আমাকে ব্যবহারকারীর ব্যবহারকারীর ভিতরে "-" ব্যবহার করতে দেয় নি .. ঠিক করা এখানে কনস্ট্রাক্টরের ভিতরে ছিল:

//-------------------------------------------------------
public AuthRepository()
//-------------------------------------------------------
{
    _ctx = new AuthContext();
    _userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(_ctx));
    _userManager.UserValidator = new UserValidator<IdentityUser>(_userManager)
    {
        AllowOnlyAlphanumericUserNames = false
    };
}

0

আমি এটির সাথেও আটকে ছিলাম কারণ আজকাল বেশিরভাগ সময় ব্যবহারকারীর নাম ই-মেল হয়, তবে আমি আলাদা ই-মেইল ক্ষেত্রের যুক্তিটি বুঝতে পারি। এগুলি নিখুঁতভাবে আমার চিন্তাভাবনা / অভিজ্ঞতা কারণ আমি এই সম্পর্কে মাইক্রোসফ্টের বক্তব্যও পাই না।

মনে রাখবেন, অ্যাস্প আইডেন্টিটি খাঁটি কাউকে সনাক্ত করার জন্য, আপনাকে সনাক্ত করার জন্য কোনও ইমেল থাকতে হবে না তবে তারা আমাদের এটি সংরক্ষণের অনুমতি দেয় কারণ এটি একটি পরিচয়ের অংশ হিসাবে তৈরি হয়। আপনি যখন ভিজ্যুয়াল স্টুডিওতে একটি নতুন ওয়েব প্রকল্প তৈরি করেন, আপনাকে অনুমোদনের বিকল্পগুলির জন্য বিকল্প দেওয়া হবে।

আপনি যদি এমভিসি এর মতো একটি খালি প্রকল্পের প্রকার বাছাই করেন এবং "স্বতন্ত্র অ্যাকাউন্টগুলিতে" প্রমাণীকরণ সেট করেন তবে আপনাকে ব্যবহারকারী ব্যবস্থাপনার জন্য প্রাথমিক আন্ডারপিনিংস দেওয়া হবে। যার মধ্যে একটি অ্যাপ্লিকেশন-স্টার্ট \ আইডেন্টিটি কনফিগ.সি.এস. এর মধ্যে দেখতে এমন একটি উপশ্রেণী অন্তর্ভুক্ত করেছে:

 // Configure the application user manager used in this application. UserManager is defined in ASP.NET Identity and is used by the application.
public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
    }

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {
        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
    }
    //N.B rest of code removed
}

এটি আমাদের যা বলে তা হ'ল মাইক্রোসফ্ট আমাদের আরও জটিল ব্যবহারকারীর নাম সংরক্ষণ করার ইচ্ছে করে (AllowOnlyAlphaNumericUserNames = মিথ্যা উল্লেখ করুন), সুতরাং আমাদের কাছে মিশ্র সংকেত রয়েছে।

এটি একটি ডিফল্ট ওয়েব প্রকল্প থেকে উত্পন্ন হ'ল আমাদের মাইক্রোসফ্টের একটি ভাল ইঙ্গিত / দিকনির্দেশ (এবং একটি পরিষ্কার উপায়) দেয় যাতে আমাদের ব্যবহারকারীর নাম ক্ষেত্রের জন্য ই-মেইল প্রবেশ করতে সক্ষম করে। এটি পরিষ্কার কারণ মাইক্রোসফ্ট.আউইএন প্রসঙ্গের সাথে অ্যাপ্লিকেশন বুটস্ট্র্যাপ করার সময় স্ট্যাটিক তৈরি পদ্ধতিটি App_Start \ startup.Auth.cs এর মধ্যে ব্যবহৃত হয়।

এই পদ্ধতির একমাত্র নীচের দিকটি হল আপনি দুবার ই-মেইলটি সংরক্ষণ করবেন .... যা ভাল নয়!


0

যেমন আপনি সম্ভবত খুঁজে পেয়েছেন (এবং প্রত্যাশিত হওয়া উচিত ছিল), মার্চ ২০১৪ প্রকাশিত এএসপি.এনইটি পরিচয় ২.০.০, কাঠামোর মধ্যে এই কার্যকারিতা যুক্ত করে।

ঘোষণা: http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-annoucing-rtm-of-asp-net-identity-2-0-0-0.aspx

অ্যাকাউন্টের নিশ্চয়তা সহ পুরো উদাহরণ এবং টিউটোরিয়াল: http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity


0

আপনি যদি নিজের অ্যাকাউন্ট নিয়ামকটিতে কোনও ধরণের আইওসি ব্যবহার করে থাকেন (আমি স্ট্রাকচারম্যাপ ব্যবহার করছি), ব্যবহারকারী পরিচালক পাস করার সময় আপনাকে হাও কুং দ্বারা উল্লিখিত ফিক্সটি প্রয়োগ করতে হবে : (আমার ছিল)। আইওসি সেটআপে এটি করার কোনও উপায় থাকতে পারে, তবে কীভাবে তা আমি জানি না।

public AccountController(ApplicationUserManager userManager)
    {
        _userManager = userManager;
        _userManager.UserValidator = new UserValidator<ApplicationUser>(_userManager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

0

আমিও একই সমস্যার মুখোমুখি হয়েছি। তবে পরিশেষে আমি নির্ধারককে নয়, আমার পদ্ধতিতে নিবিড় অংশ যুক্ত করে সমস্যার সমাধান করেছি।

public void MyMethod(){

     UserManager<ApplicationUser> manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));


                    // Configure validation logic for usernames  
                    manager.UserValidator = new UserValidator<ApplicationUser>(manager)
                    {
                        AllowOnlyAlphanumericUserNames = false,
                        RequireUniqueEmail = true

                    };         

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.