首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取用户上次访问的时间

获取用户上次访问的时间
EN

Stack Overflow用户
提问于 2018-02-10 05:43:36
回答 2查看 2K关注 0票数 3

我使用IdentityServer 4(带有asp.net存储)作为asp.net核心API。我想在数据库中的某个地方添加一个“最后访问”字段,用于在用户搜索端点中订购我的用户类型之一。理想情况下,这将显示他们最后一次在系统中执行操作。

如果我在登录方法中这样做,它将不准确,因为它只在最初生成令牌时才会更新。我可以向用户访问的每个端点添加一个方法,但这并不是正确的解决方案,因为它将重复我自己。

维护记录用户上次访问系统的数据库字段的正确位置和方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-12 07:25:08

为了记录用户的活动时间,您可以尝试为每个请求调用中间件。

这里有一些步骤。

1.向ApplicationUser添加字段,存储上次访问的时间

代码语言:javascript
复制
public class ApplicationUser : IdentityUser
{       
    public DateTime LastAccessed { get; set; }
}

2.运行命令+-迁移LastAccessed和LastAccessed

3.添加中间件,根据用户名更新上次访问的时间。

代码语言:javascript
复制
        app.UseAuthentication();
        app.Use(async (context, next) => {
            await next.Invoke();
            //handle response
            //you may also need to check the request path to check whether it requests image
            if (context.User.Identity.IsAuthenticated)
            {
                var userName = context.User.Identity.Name;
                //retrieve uer by userName
                using (var dbContext = context.RequestServices.GetRequiredService<ApplicationDbContext>())
                {
                    var user = dbContext.ApplicationUser.Where(u => u.UserName == userName).FirstOrDefault();
                    user.LastAccessed = DateTime.Now;
                    dbContext.Update(user);
                    dbContext.SaveChanges();
                }
            }
        });
票数 1
EN

Stack Overflow用户

发布于 2019-10-22 12:10:10

我为类似的问题添加了一个答案,我在identity server项目中使用了一个集中式解决方案(使用IEventSink)。我们有30+ api,我发现最好只在一个地方执行解决方案,而不是在每个api中执行它。所以我在这里添加了这个答案,以防有人遇到和我的要求相同的情况。这是我的answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48717661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档