Как да запомните данните за влизане в MVC5, когато се използва външен доставчик

В нашето MVC5-приложение с OWIN използваме освен локалните акаунти и външни входове (google). Когато потребителят влезе с локалния си акаунт, той може да активира опцията да го запомни, така че да не се налага да влиза всеки път наново. Когато влезе с акаунта си в Google, той всеки път трябва да щракне отново върху външния бутон за влизане в Google.

Има ли вградена опция за активиране на опцията „запомни ме“ и за външни влизания? Или има сигурен начин за добавяне на тази функция?


person HCL    schedule 20.04.2014    source източник


Отговори (3)


Просто трябва да зададете IsPersistent на true, за да постигнете това, когато влезете с потребителската самоличност (вероятно също бихте искали да добавите някакъв вид квадратче за отметка „Запомни ме“ за външния поток)

        AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = <rememberMe> }, <userIdentity>);
person Hao Kung    schedule 22.04.2014
comment
Мога ли да ви помоля да разгледате и тези два въпроса, тъй като смятам, че са пряко свързани: stackoverflow.com/questions/24352533/ и stackoverflow.com/questions/24323330/ - person HCL; 22.06.2014

Да продължа това, което Хао Кунг предложи.

Ще намерите въпросния ред код във файла 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 на константата true:

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = <b>true</b>}, identity);
person Barry MSIH    schedule 24.07.2014

използвайки външния метод за влизане:

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)
  {
  ...
}
  • вижте Microsoft.AspNet.Identity.Owin.SignInManager::ExternalSignInAsync()

  • Обикновено използвам "isPersist = true" в моите уеб сайтове - повечето потребители очакват да бъдат влезли автоматично при повторно влизане в сайт, изискващ идентификация.

person yarg    schedule 12.04.2016