2016-02-01 39 views
1

转换我的MVC应用程序以利用AspNet Identity。我创建了一个扩展SignInManager的ApoplicationSignInManager类如何向自定义SignInManager中的ApplicationUser添加声明

我重写了CreateIdentityAsyc,并且我想在这里添加自定义声明而不保留到db,以便这些值可用于登录用户。

public class ApplicationSignInManager : SignInManager<ApplicationUser, string> 
{ 
    private readonly IUserService userService; 

    public ApplicationSignInManager(ApplicationUserManager userManager, IAuthenticationManager authenticationManager, IUserService userService) 
     : base(userManager, authenticationManager) 
    { 
     this.userService = userService; 
    } 

    public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user) 
    { 
     var myUser = userService.GetUser(user.Id); 

     var userIdentity = user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager); 

     userIdentity.Result.AddClaim(new Claim("MyCustomID", myUser.CutomID.ToString())); 

     return userIdentity; 
    } 
} 

我的问题是,执行AddClaims行时,应用程序挂起。我猜这与异步任务的死锁有关,但我无法弄清楚如何解决这个问题。

请给我一些指导。

+1

如果它挂起,那么它一定是一个线程问题。请等待user.GenerateUserIdentityAsync –

+1

您应该等待'GenerateUserIdentityAsync()'的调用。 –

回答

0

尝试使用awaitGenerateUserIdentityAsync方法。

public async override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user) 
{ 
    ... 

    var userIdentity = await user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager); 
    ... 
} 
相关问题