उपयोगकर्ता नाम के रूप में ईमेल पते की अनुमति देने के लिए Microsoft.AspNet.Identity कॉन्फ़िगर करें


121

मैं एक नया एप्लिकेशन बनाने की प्रक्रिया में हूं और EF6-rc1, Microsoft.AspNet.Identity.Core 1.0.0-rc1, Microsoft.AspNet.Identity.EntityFramework 1.0.0-rc1, Microsoft.AspNet.Identity का उपयोग कर शुरू कर दिया है .Owin 1.0.0-rc1, आदि और कल RTM रिलीज़ के साथ, मैंने उन्हें आज शाम को NuGet के माध्यम से RTM में अपडेट कर दिया।

मेरे द्वारा अब तक किए गए काम में कुछ बदलावों के अलावा, मुझे यह सब अच्छा लग रहा था, जब तक कि मैंने ऐप के लिए एक स्थानीय उपयोगकर्ता खाता बनाने की कोशिश नहीं की।

मैं उस ई-मेल पते पर काम कर रहा था जो उपयोगकर्ता नाम का प्रारूप था, जिसके साथ रिलीज़ उम्मीदवार ने बहुत काम किया था, लेकिन अब उपयोगकर्ता नाम के लिए ईमेल पते वाला उपयोगकर्ता बनाते समय, यह निम्नलिखित सत्यापन त्रुटि को बढ़ाता है:

उपयोगकर्ता नाम xxxxx@xxxx.com अमान्य है, इसमें केवल अक्षर या अंक हो सकते हैं।

मैंने अंतिम घंटे बिताए हैं या इसलिए इसके लिए कॉन्फ़िगरेशन विकल्पों पर समाधान या प्रलेखन की खोज कर रहा हूं, लेकिन कोई फायदा नहीं हुआ।

क्या कोई ऐसा तरीका है जिसे मैं उपयोगकर्ता नाम के लिए ई-मेल पते की अनुमति देने के लिए कॉन्फ़िगर कर सकता हूं?


1
((UserValidator<ApplicationUser>) UserManager.UserValidator).AllowOnlyAlphanumericUserNames = false;
अरविस

जवाबों:


164

आप इसे UserManager पर अपने UserValidator में प्लग इन करके, या बस इसे डिफ़ॉल्ट कार्यान्वयन पर बंद करके अनुमति दे सकते हैं:

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

3
आप एक कस्टम UserValidator बनाने के बारे में क्या करेंगे?
तेह्वेनर

2
कोड में वास्तव में (जिसमें फ़ाइल / विधि) (डिफ़ॉल्ट mvc5 ऐप में) क्या मुझे UserManager.UserValidator = नया UserValidator <TUser> (UserManager) {AllowOnlyAlppumumericUserNames = false} डालना चाहिए? धन्यवाद।
पूसबूट्स

29
अपने public AccountController(UserManager<ApplicationUser> userManager)UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
अकाउंटकंट्रोलर

1
@graycrow मैं Asp.net सदस्यता कैसे काम करता है और उपयोग करने के लिए आसान था के बारे में शेख़ी रखता हूँ। मुझे इसके लिए VS से सुलभ विन्यास वेबसाइट का उपयोग करने में बहुत मजा आया ..
मफिन मैन

@graycrow, SqlMembership प्रदाताओं के दिनों के लिए asp.net पहचान की वर्तमान स्थिति को देखते हुए। एक बड़े परिप्रेक्ष्य के लिए देखें: एस्प नेट पहचान पर
ब्रॉकलेन

16

इस का # संस्करण (App_Code \ IdentityModels.cs में) है

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

9

मेरे मामले में, वीएसपी 2013 सी #, एमवीसी 5.2.2 में चल रहा है, एएसपी.नेट आइडेंटिटी 2.0 का उपयोग करके, समाधान को App_Start \ IdentityConfig.cs के अंदर ApplicationUserManager कंस्ट्रक्टर को अपडेट करना था:

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

5

मुझे भी यही समस्या थी, जब मैंने उपयोगकर्ता नाम बनाने के लिए कोड को बदलने की कोशिश की थी तो वह व्यक्ति का वास्तविक नाम था, न कि सिस्टम ने मुझे वही त्रुटि संदेश दिखाया "उपयोगकर्ता नाम ABC DEF अमान्य है, केवल अक्षर या अंक हो सकते हैं । " मैंने अंतरिक्ष चरित्र (अंत में मेरे मामले में) को AllowedUserNameCharacters में जोड़ने से समस्या हल की।

Im Asp.Net Core 2.2 और VS2017 का उपयोग कर रहा है

यह मेरा कोड है

Startup.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

यदि आप ASP.Net वेबफ़ॉर्म का उपयोग कर रहे हैं और इसे पूरा करने का प्रयास कर रहे हैं, तो बस अपना IdentMModels.vb / cs फ़ाइल खोलें और पब्लिक क्लास उपयोगकर्ता प्रबंधक के तहत, इसे इस तरह देखें:

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 और ऊपर के लोगों के लिए, UserManager में ये सत्यापनकर्ता आसानी से पढ़े जाते हैं। उपयोगकर्ता पते को ईमेल पते के रूप में डिफ़ॉल्ट रूप से अनुमति दी जाती है, लेकिन यदि आपको अपने उपयोगकर्ता नाम में वर्णों के और अधिक अनुकूलन की आवश्यकता है, तो आप Startup.cs में ऐसा कर सकते हैं:

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

    // ... etc
}

(मुझे विरासत के कारणों के लिए एक '/' की आवश्यकता थी।)


1

चूंकि मेरे अपने ApplicationUserManager को कोड करने के बाद: UserManager वर्ग ने मेरे लिए काम नहीं किया (शायद bc मैं रेजर पेज का उपयोग करता हूं, MVC का नहीं), यहाँ एक और समाधान है: CofigureServices में स्टार्टअप () में आप पहचान विकल्प को कॉन्फ़िगर कर सकते हैं:

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

Microsoft डॉक्स में इस विषय पर अधिक जानकारी: https://docs.microsoft.com/de-de/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.2


0

यदि आपको IdentityConfig.cs नहीं मिल रहा है, तो इस कोड के साथ अपने खाता नियंत्रक को बदलें।

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

मैं इसके साथ भी फंस गया था क्योंकि ज्यादातर उपयोगकर्ता नाम इन दिनों ई-मेल हैं, मैं एक अलग ई-मेल क्षेत्र के तर्क को समझ सकता हूं। ये विशुद्ध रूप से मेरे विचार / अनुभव हैं क्योंकि मैं भी इस पर माइक्रोसॉफ्ट का कहना नहीं पा सका।

याद रखें, एस्प की पहचान विशुद्ध रूप से किसी की पहचान करने के लिए है, आपको पहचानने के लिए ई-मेल की आवश्यकता नहीं है, लेकिन वे हमें इसे स्टोर करने की अनुमति देते हैं क्योंकि यह एक पहचान का हिस्सा बनता है। जब आप विज़ुअल स्टूडियो में एक नया वेब प्रोजेक्ट बनाते हैं, तो आपको प्रमाणीकरण विकल्पों के लिए विकल्प दिया जाता है।

यदि आप एक गैर रिक्त प्रोजेक्ट प्रकार जैसे MVC का चयन करते हैं और "व्यक्तिगत खातों" के लिए प्रमाणीकरण सेट करते हैं, तो आपको उपयोगकर्ता प्रबंधन के लिए मूल आधार दिया जाता है। जिनमें से एक में App_Start \ IdentityConfig.cs के भीतर इस तरह दिखने वाली एक सब क्लास शामिल है:

 // 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
}

यह हमें बताता है कि Microsoft हमें अधिक जटिल उपयोगकर्ता नाम संग्रहीत करने की अनुमति देता है (AllowOnlyAlpNNumericUserNames = false पर देखें), इसलिए वास्तव में हमारे पास मिश्रित संकेत हैं।

यह तथ्य एक डिफ़ॉल्ट वेब परियोजना से उत्पन्न होता है, जो हमें Microsoft (और एक स्वच्छ तरीके) से एक अच्छा संकेत / दिशा देता है जो हमें उपयोगकर्ता नाम फ़ील्ड के लिए ई-मेल दर्ज करने में सक्षम बनाता है। जब Microsoft_OWIN संदर्भ के साथ एप्लिकेशन को बूटस्ट्रैप कर रहा हो, तो यह स्थिर है क्योंकि स्थिर बनाने की विधि का उपयोग App_Start \ Startup.Auth.cs के भीतर किया जाता है।

इस दृष्टिकोण के लिए केवल नीचे की ओर आप दो बार ई-मेल का भंडारण कर रहे हैं .... जो अच्छा नहीं है!


0

जैसा कि आप शायद पता लगा चुके होंगे (और उम्मीद की जा रही थी), ASP.NET आइडेंटिटी 2.0.0, मार्च 2014 को जारी किया गया, इस कार्यक्षमता को फ्रेमवर्क में जोड़ता है।

घोषणा: http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announcing-rtm-of-asp-net-identity-2-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

मैंने उसी समस्या का सामना किया है। लेकिन अंत में मैंने अपनी विधि में bellow भाग जोड़कर समस्या को हल किया, न कि निर्माता।

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

                    };         

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.