1

WebAPI アプリケーションがあり、ユーザーごとに保存する情報に電子メールを追加したいと考えています。多くの例がありますが、それらが現在 Identity 2 で推奨される方法であるかどうかはわかりません。特に、Identity 2 には電子メールを処理するための拡張メソッドがあることに気付きました。

UserManagerExtensions.FindByEmail メソッド

しかし、この拡張方法を使用できるようにするにはどうすればメールを保存できますか? ここに保管する必要がありますか? その場合、クレームとして保管できますか?

public class ApplicationUser : IdentityUser {
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
    // I don't want to add email here 
}

ただし、これを行う方法がわかりません:

  • 「// ここにカスタム ユーザー クレームを追加する」というメールを上記に追加する必要があります。
  • 以下の登録方法を変更する必要がありますか? その場合、どのように変更すればよいですか?

    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
    
        IdentityUser user = new IdentityUser
        {
            UserName = model.UserName
        };
    
        IdentityResult result = await UserManager.CreateAsync(user, model.Password);
        IHttpActionResult errorResult = GetErrorResult(result);
    
        if (errorResult != null)
        {
            return errorResult;
        }
    
        return Ok();
    }
    

これを行う方法についてアドバイスをいただければ幸いです。Identity2 アプリケーションのクレームでトークン ベースのアプローチを使用していることに注意してください。可能であれば、ユーザー テーブルに列を追加するだけでなく、クレームでこれを行うことを検討しています。

4

1 に答える 1

3

IdentityUserクラスには既に電子メール アドレスのプロパティが含まれているため、それを複製する必要はありません。次のスニペットのように、登録プロセス中にそのプロパティを設定するだけで済みます

IdentityUser user = new IdentityUser
{
    UserName = model.UserName,
    Email = model.Email
};

RegisterViewModelRegisterビューをその追加のプロパティとフィールドで拡張することを忘れないでください。

于 2014-05-25T14:50:55.713 に答える