简介 我正在申请授权,注册用户被授权基于某些行动/控制者的角色,即
[Authorize(Roles = "Developer,Admin,User")]
我的问题是,如果用户使用facebook或google等外部登录方式登录,如何授权他该怎么办。
为实现这一目标应该或可以做些什么,如果有人知道,那么请帮助。谢谢你的时间。
答案 0 :(得分:4)
这样做
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, DisplayName=model.Displayname };
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
UserManager.AddToRole(user.Id, "ExternalUser");// This is the important line
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
}
每当用户通过外部服务登录时,他都会自动映射到角色“外部用户”。现在你可以像这样授权了
[Authorize(Roles = "Externaluser")]
答案 1 :(得分:2)
如果您以“正确”的方式登录,所有角色的内容都按预期工作,您的[Authorize(Roles = "Developer,Admin,User"]
属性将按预期开箱即用。
我可以给出的最佳建议是打开Visual Studio,创建一个新的ASP.NET MVC网站并选择单个用户帐户。创建的代码具有完整的实现,包含外部登录功能(Facebook,Twitter等)。
您应该在自己的代码库中复制它在模板/示例中编写的方式。