asp.net-mvc - MVC - Asp.Net 身份。用户登录时如何登录到数据库

标签 asp.net-mvc asp.net-identity-2

我添加了一个日期时间?我的 AppUser 类的 LastLoggin 属性。我喜欢在用户登录时将属性设置为 DateTime.Now。使用登录 View 登录或通过 cookie 自动登录时。

实际捕获登录的地方是什么?
任何“最佳实践”将不胜感激。

最佳答案

这取决于。如果您使用身份 2.1,他们引入了一个名为 SignInManager 的新类。该类包装了 OWIN AuthenticationManager 类,该类实际上负责用户登录。在 asp.net 2.1 中,您会在 SigninManager 中看到很少的登录方法,例如

  • PasswordSignInAsync()
  • ExternalSignInAsync()
  • SignInAsync() 和
  • TwoFactorSignInAsync()。

  • 一旦从数据库中检索到用户信息并进行检查,所有这些方法都会调用 AuthenticationManager.Signin() 来实际登录用户。这本来是一个完美的地方,但这是由 OWIN 设置的接口(interface)成员,所以您将无法覆盖其 Signin 方法。所以捕获用户登录的最佳位置是SigninManager.SigninAsync(...)。以我拙见的方法。这是因为如果凭据有效,并且用户没有被锁定等,我上面提到的所有方法,例如
  • PasswordSignInAsync()
  • ExternalSignInAsync()
  • TwoFactorSignInAsync()

  • 点击SigninManager.SigninAsync(...) .由于此方法是虚拟的,因此您可以在 SigninManager 类中覆盖并执行类似的操作
    public override async Task SignInAsync(ApplicationUser user, bool isPersistent, bool rememberBrowser)
        {
            await base.SignInAsync(user, isPersistent, rememberBrowser);
            user.LastLogin= DateTime.Now;
            UserManager.Update(user);
        }
    

    请注意,通过调用 UserManager.Update(),您将访问数据库,但我不知道如何避免这种情况。 asp.net 身份方法喜欢访问数据库,除非您覆盖它们的实现,否则您将不得不忍受它。 (根据我的 SQL 跟踪,使用 SigninManager.PasswordSignin() 没有对基类进行任何自定义会命中数据库 4 次)

    如果您没有使用 asp.net identity 2.1,则 SigninManager 类不存在。 (MS 有一个示例 nuget 项目,它有一个类似的帮助类,但它不是框架的一部分)。您将需要在该帮助程序类中找到该方法并覆盖(或更改)登录方法。

    最后一点,在我看来,asp.net 身份的文档还不是很完整,源代码还没有公开。我用了JetBrains DotPeek查看 Microsoft.AspNet.Identity.Owin 中的代码装配和SigninManager类(class)。我向您提到的流程(每种方法如何以某种方式最终到达 SigninAsync() )是我对 DotPeek 代码的解释。随意验证并确保我没有错过任何东西。祝你好运。

    关于asp.net-mvc - MVC - Asp.Net 身份。用户登录时如何登录到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296595/

    相关文章:

    c# - IdentityDbContext.SaveChanges 在 Claims.Remove 或 Claims.Clear 之后失败

    asp.net-identity-2 - 允许电子邮件和用户名进行身份验证

    c# - MVC3 Controller 构造函数 + Ninject

    c# - MVC 函数返回但在发送结果之前等待异步函数

    javascript - Kendo Treeview 的 JQuery 和 ASP.NET MVC json 输出

    javascript - ASP。 NET Controller 接收空数组

    asp.net-web-api - 除了 OAuth OWIN/Web Api 之外的 API key

    asp.net-mvc - 对 ASP.NET Identity 和 IdentityDbContext 感到困惑

    javascript - 使用 jQuery 和 ASP.NET MVC 来回更改网页?

    asp.net-mvc - ASP.NET Identity 2.1 和 EF 6 - 应用程序用户与其他实体的关系