Asp.net mvc 5 使用外部提供程序时如何记住MVC5中的登录

Asp.net mvc 5 使用外部提供程序时如何记住MVC5中的登录,asp.net-mvc-5,wif,owin,Asp.net Mvc 5,Wif,Owin,在使用OWIN的MVC5应用程序中,除了本地帐户之外,我们还使用外部登录(google)。当用户使用其本地帐户登录时,他可以激活该选项来记住他,因此他不必每次都重新登录。当他用他的谷歌账号登录时,他每次都必须新点击谷歌的外部登录按钮 是否有一个内置选项来激活“记住我”-也用于外部登录的选项?或者是否有安全的方法添加此功能?您只需将IsPersistent设置为true,即可在登录用户身份时完成此操作(您可能还希望为外部流添加某种类型的“记住我”复选框) AuthenticationManager

在使用OWIN的MVC5应用程序中,除了本地帐户之外,我们还使用外部登录(google)。当用户使用其本地帐户登录时,他可以激活该选项来记住他,因此他不必每次都重新登录。当他用他的谷歌账号登录时,他每次都必须新点击谷歌的外部登录按钮


是否有一个内置选项来激活“记住我”-也用于外部登录的选项?或者是否有安全的方法添加此功能?

您只需将IsPersistent设置为true,即可在登录用户身份时完成此操作(您可能还希望为外部流添加某种类型的“记住我”复选框)

AuthenticationManager.SignIn(新的AuthenticationProperties{IsPersistent=},);

跟进浩功的建议

您将在accountController.cs文件中找到有问题的代码行。默认功能是:

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
    {
        AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
        var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
        AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent}, identity);
    }
要在所有外部提供程序中启用“记住我”功能,请更改行:

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent}, identity);
通过将isPersistent Variable更改为常量true:

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = <b>true</b>}, identity);
AuthenticationManager.SignIn(新的AuthenticationProperties(){IsPersistent=true},标识);

使用外部登录方法:

public async Task<ActionResult> ExternalConfirm(EnumLoginProviders loginProvider, string returnUrl)
{
  var loginInfo = await MyAuthenticationManager.GetExternalLoginInfoAsync();
  ...
  // Sign in the user with this external login provider if already logged in
  var result = await SignInManager
                      .ExternalSignInAsync(loginInfo, isPersistent: <remember-me>);
  if (result == SignInStatus.Success)
  {
  ...
}
公共异步任务

  • 我通常在我的网站中使用“isPersist=true”——大多数用户希望在重新进入需要识别的网站时自动登录


  • 我想请您也研究一下这两个问题,因为我认为它们是直接相关的:和
    public async Task<ActionResult> ExternalConfirm(EnumLoginProviders loginProvider, string returnUrl)
    {
      var loginInfo = await MyAuthenticationManager.GetExternalLoginInfoAsync();
      ...
      // Sign in the user with this external login provider if already logged in
      var result = await SignInManager
                          .ExternalSignInAsync(loginInfo, isPersistent: <remember-me>);
      if (result == SignInStatus.Success)
      {
      ...
    }