当前位置: 首页 > 编程语言 > C#

如何将OnAuthenticated事件中的信息传递给controller和SignIn?Share

时间:2023-04-10 22:40:11 C#

如何将信息从OnAuthenticated事件传递给控制器??和登录?正如我在这里发现的那样,我无法在FacebookAuthenticationProviderOnAuthenticated事件中调用HttpContext.GetOwinContext().Authentication.SignIn(...)。这似乎是一个不同的上下文。我的用户将来自facebook,这意味着我将需要检索ID、电子邮件等数据...可以通过OnAuthenticated事件访问此信息,我需要能够登录。我需要访问此信息我的控制器...我在活动中试过这个:context.OwinContext.Set("FacebookUser",rawUserObjectFromFacebookAsJson);但是在控制器上,如果我尝试检索它,它是空的。varfbuser=HttpContext.GetOwinContext().Get("FacebookUser");所以我的问题是,如何将这些数据传递给控制器??以便我可以登录?通过查看此答案并弄清楚我能做什么,我找到了一种方法。使用Claims,我可以将从Facebook检索到的所有值添加到身份声明中。OnAuthenticated=(context)=>{conststringXmlSchemaString="http://www.w3.org/2001/XMLSchema#string";varrawUserObjectFromFacebookAsJson=context.User;context.Identity.AddClaim(newSystem.Security.Claims.Claim("urn:facebook:access_token",context.AccessToken,XmlSchemaString,"Facebook"));foreach(varxincontext.User){varclaimType=string.Format("urn:facebook:{0}",x.Key);字符串claimValue=x.Value.ToString();如果(!context.Identity.HasClaim(claimType,claimValue))context.Identity.AddClaim(newSystem.Security.Claims.Claim(claimType,claimValue,XmlSchemaString,"Facebook"));}返回Task.FromResult(0);然后在我的控制器上,我可以通过使用ClaimsIdentityidentity=awaitHttpContext.GetOwinContext().Authentication.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie)获得该身份;然后我会采取行动ntityAsync(DefaultAuthenticationTypes.ExternalCookie);varuser=newIdentityUser(){Id=identity.GetUserId(),UserName=identity.Name,};等待登录异步(用户,身份);如果(!identity.IsAuthenticated){returnRedirectToAction(“登录”);}returnRedirectToAction("Index","Home");}和我的LoginAsync方法privateasyncTaskLoginAsync(IdentityUseruser,ClaimsIdentityidentity){AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);//我不能只使用我在Facebook上获得的身份//我需要创建这个身份,否则它将无法正确登录//身份验证类型必须是ApplicationCookie并且属性//是只读的,所以...varuserIdentity=awaitUserManager.CreateIdentityAsync(user,DefaultAuthenticationTypes.ApplicationCookie);//现在我们必须转移声明,添加检查以避免重复foreach(varclaiminidentity.Claims){if(!userIdentity.HasClaim(c=>c.Type==claim.Type))userIdentity.AddClaim(声明);}//然后它将成功登录AuthenticationManager.SignIn(newAuthenticationProperties{IsPersistent=true},userIdentity);然后我就可以随时访问HttpContext.GetOwinContext().Authentication.User.Claims,并检索我需要的内容以上是C#学习教程:如何将OnAuthenticated事件中的信息传递给控制器??和SignIn?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: