VS2013 MVC 5模板:使用Session将索赔从ExternalLoginCallback保存到External



AccountController.cs中我根据孙宏业的代码进行了修改,以便暴露外部声明

public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var result = await AuthenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie); 
            //  ...
             Session["ClaimsIdentity"] = result.Identity; // 

注意,我把ClaimsIdentity放在Session中,因为这是我在中创建用户时使Claims可用的唯一方法

 public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
    {
            // ... 
            var result = await UserManager.CreateAsync(user);
            if (result.Succeeded)
            {
                result = await UserManager.AddLoginAsync(user.Id, info.Login);
                if (result.Succeeded)
                {
                    ClaimsIdentity id = (ClaimsIdentity)Session["Identity"];
                     // then for each Claim claim in id ....
                     result = await UserManager.AddClaimAsync(user.Id, claim));

此代码的效果是根据需要将外部声明存储在AspNetUserClaims表的DB中。例如,这对于存储来自外部登录声明的电子邮件非常方便,而无需明确要求用户提供电子邮件。

我的问题是:有更好的方法吗

是否更好地使用:System.Web.HttpContext.Current.Cache

因此,您可以直接再次检索存储在cookie中的标识。实际上,您可以通过调用相同的结果来实现这一点。确认操作中的身份码,您根本不需要将其粘贴到会话中:

var result = await AuthenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie); 

相关内容

  • 没有找到相关文章

最新更新