簡體   English   中英

如果用戶使用 ASP .Net Identity 通過外部登錄提供程序登錄,如何保存用戶上次登錄日期?

[英]How to save user last login date if he was logged in with external login provider using ASP .Net Identity?

我已經使用LastLoginDate屬性擴展了AspNetUser類, LastLoginDate在用戶每次登錄時記住。

public sealed partial class User : IdentityUser<int, UserLogin, UserRole, UserClaim>, IUser<int>, IDatabaseEntity
{
    ...
    public DateTime? LastLoginDate { get; set; }   
}

每次用戶使用電子郵件和密碼作為登錄憑據進行常規登錄時,日志記錄工作正常。 AccountController我有我的登錄操作:

[HttpPost]
public ActionResult Login(LoginModel model)
{
    ...
    var result = SignInManager.PasswordSignIn(model.Email, model.Password, model.RememberMe);

    if (result == SignInStatus.Success)
    {
        var user = UserManager.FindByEmail(email);
        UserManager.RememberLoginDate(user);  
        return Redirect(model.ReturnUrl);
    }

    ...
}

RememberLoginDate只是一個擴展方法,它基本上只是將當前時間設置為用戶LastLoginDate屬性:

public static IdentityResult RememberLoginDate(this ApplicationUserManager manager, User user)
{
     user.LastLoginDate = DateTime.UtcNow;;
     return manager.Update(user);
}

但是當我像下面這樣進行外部登錄時:

[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl, string provider)
{
     var loginInfo = AuthenticationManager.GetExternalLoginInfo();
     if (loginInfo == null)
          return RedirectToAction("ExternalLoginFail");

     // Sign in the user with this external login provider if the user already has a login
     var result = SignInManager.ExternalSignIn(loginInfo);
     if (result == SignInStatus.Success)
          return RedirectToLocal(returnUrl);

     if (result == SignInStatus.Failure)
     {
          return View("ExternalLoginConfirmation" ...) 
     }

     ...
}

在這種情況下如何記錄用戶登錄日期? 我現在沒有關於用戶的信息,例如emailId來讓他使用UserManager 我已經嘗試過: User.Identity.GetUserId<int>()SignInManager.ExternalSignIn(loginInfo)之后獲取用戶Id但它在登錄后沒有更新,它仍然是default(int) - 0 SignInStatus只是一個enum ,沒有關於登錄用戶的附加信息,並且使用ExternalLoginInfo.Email也不是一個選項,因為該電子郵件可能與用戶實際注冊的電子郵件不同。

您應該能夠使用UserManager.FindAsync(loginInfo.Login)通過提供程序和密鑰拉回您的用戶 - 這就是 SignInManager 本身的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM