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