4

介绍 我在申请工作许可,注册用户为基础的一些行动授权的角色/控制器,即如何授权用户谁在Asp.Net MVC使用外部登录登录

[Authorize(Roles = "Developer,Admin,User")] 

我的问题是,如果用户使用Facebook或Google等外部登录方法登录,该如何授权他呢?

应该做什么或可以做到这一点,如果有人知道这一点,那么请帮助。谢谢你的时间。

+1

只需将它们添加到外部登录回调方法中的角色 –

+0

@RachitGupta感谢您的回复,您可以将它作为答案吗? –

+1

查看下面的答案。希望它有助于 –

回答

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")] 
+0

感谢您的帮助,这是我看到的正确方法 –

2

如果你在“适当”的方式记录他们,所有的角色的东西的作品如预期,你[Authorize(Roles = "Developer,Admin,User"]属性将如预期的开箱。

我可以给这个最好的建议是打开Visual Studio,创建一个新的ASP.NET MVC网站并选择个人用户帐户。创建的代码具有包含外部登录功能(Facebook,Twitter等)的完整实现。

您应该复制它在自己的代码库中写入模板/示例的方式。

+0

感谢您的帮助,添加外部登录用户角色解决了问题 –

+1

很高兴帮助。 – Luke