129

私は新しいアプリケーションを作成している途中で、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 時間ほどかけて、その構成オプションに関する解決策やドキュメントを探しましたが、役に立ちませんでした。

ユーザー名に電子メール アドレスを許可するように構成する方法はありますか?

4

13 に答える 13

170

UserManager に独自の UserValidator をプラグインするか、デフォルトの実装でオフにするだけで、これを許可できます。

UserManager.UserValidator = new UserValidator<TUser>(UserManager) { AllowOnlyAlphanumericUserNames = false }
于 2013-10-19T00:08:50.400 に答える
16

これの C# バージョン (App_Code\IdentityModels.cs 内) は

public UserManager()
        : base(new UserStore<ApplicationUser>(new ApplicationDbContext()))
    {
        UserValidator = new UserValidator<ApplicationUser>(this) { AllowOnlyAlphanumericUserNames = false };
    }
于 2014-03-14T13:33:19.720 に答える
6

AspNet.Identity.Core 2.1 以降の場合、UserManager のこれらのバリデータは読み取り専用です。ユーザー名としての電子メール アドレスは既定で許可されていますが、ユーザー名の文字をさらにカスタマイズする必要がある場合は、次のように Startup.cs で行うことができます。

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

    // ... etc
}

(従来の理由から「/」が必要でした。)

于 2018-12-19T00:52:39.937 に答える
4

ASP.Net Web フォームを使用していて、これを達成しようとしている場合は、IdentityModels.vb/cs ファイルを開き、Public Class UserManager の下で次のようにします。

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
于 2014-01-05T17:28:11.277 に答える
1

独自の ApplicationUserManager : UserManager クラスをコーディングしてもうまくいかなかったので (おそらく bc では MVC ではなく Razor Pages を使用しています)、別の解決策があります。

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

于 2019-05-10T13:07:07.673 に答える
0

IdentityConfig.cs が見つからない場合は、AccountController コンストラクターをこのコードに置き換えます。

public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) 
  {
      AllowOnlyAlphanumericUserNames = false  
  };
}
于 2016-07-15T12:08:21.960 に答える
0

お気づきかもしれませんが (そして当然のことでした)、2014 年 3 月にリリースされた ASP.NET Identity 2.0.0 では、フレームワークにこの機能が追加されています。

お知らせ: http://blogs.msdn.com/b/webdev/archive/2014/03/20/test-announce-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

于 2014-06-17T07:58:33.863 に答える