ASP.net 标识 - 外部登录 - 不会注销



在我的应用程序中,我所有的身份验证都发生在谷歌 - 即 - 我所有用户都是谷歌帐户。

我不需要用户在我的应用中注册,只需使用 Google 帐户登录即可。 但是,我确实想为具有 ASP.net 身份的用户管理角色(我认为(

考虑到这一点,在成功的外部身份验证后,我创建了一个 ASP.net Identity用户(如果不存在(

所以,我有我的ExternalLoginCallback如下:

    [AllowAnonymous]
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var authenticationManager = Request.GetOwinContext().Authentication;
        var loginInfo = await authenticationManager.GetExternalLoginInfoAsync();
        //successfully authenticated with google, so sign them in to our app
        var id = new ClaimsIdentity(loginInfo.ExternalIdentity.Claims, DefaultAuthenticationTypes.ApplicationCookie);
        authenticationManager.SignIn(id);
        //Now we need to see if the user exists in our database
        var user = UserManager.FindByName(loginInfo.Email);
        if (user == null)
        {
            //user doesn't exist, so the user needs to be created
            user = new ApplicationUser { UserName = loginInfo.Email, Email = loginInfo.Email };
            await UserManager.CreateAsync(user);
            //add the google login to the newly created user
            await UserManager.AddLoginAsync(user.Id, loginInfo.Login);
        }
        return RedirectToLocal(returnUrl);
    }

想法是,我现在可以管理用户,添加角色,检查用户是否在角色中等。

首先,这是一个明智的方法吗?还是我把它复杂化了?

但是,我遇到的一个问题是注销我的应用程序

我的Logout操作如下所示:

public ActionResult LogOut()
{
    HttpContext.GetOwinContext().Authentication.SignOut();
    return RedirectToAction("Index", "Home");
}

我的索引操作使用 [授权] 属性修饰 -但是,当我"注销"时 - 它重定向到 Home.Index - 但我似乎仍然登录?

根据此ASPNet标识工作项,这是设计使然,您需要直接调用Google的API才能将用户注销。

使用返回 URL (OAuth( 完成帖子注销链接这是一个对我有用的解决方案:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
        AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
        return Redirect("https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=https://[url-of-your-site]");
    }

相关内容

  • 没有找到相关文章

最新更新