【问题标题】:How can I update user data form session in ServiceStack?如何在 ServiceStack 中更新用户数据表单会话?
【发布时间】:2025-12-31 00:55:12
【问题描述】:

非常简单的问题:我的服务中有一个会话对象:

var session = this.GetSession(); //IAuthSession
   if (!session.IsAuthenticated)

我可以根据传递给服务的参数修改会话类中的一些值(例如权限);然后我想拯救他们。 怎么样?

这样做的直接方法:创建一个 UserAuth 对象,使用 IAuthSession 中的所有字段填充它,获取 IDbConnectionFactory,保存它。

肯定有更快更好的方法,但我没找到!

更一般地说,如何在 IAuthSession 和 UserAuth 之间切换?即,给定一个 IAuthSession 对象,我如何获取 UserAuth 对象、修改它并持久化修改?

我在how to append metadata to a user login info 上阅读了这个问题,但仍然缺少一些东西。

添加所需内容后,如何保存? (我怀疑你只是将元数据添加到 session 和 UserAuth 中,然后使用 IDbConnectionFactory 保存后者;一定有更好的方法!)

【问题讨论】:

    标签: authentication servicestack


    【解决方案1】:

    老问题,但值得回答。

    正在使用的UserAuthRepository 应该具有UpdateUserAuth 方法的实现,可以调用该方法来保存UserAuth 更改

    UpdateUserAuth(UserAuth existingUser, UserAuth newUser, string password)
    

    另一种更简单的方法是使用PUT 调用RegisterService,这将为您更新现有的注册用户。

    /// <summary>
    /// Update an existing registraiton
    /// </summary>
    public object Put(Register request)
    {
       return Post(request);
    }
    

    服务调用类似于以下内容:

    using (var authService = base.ResolveService<RegisterService>())
    {
       var authResponse = authService.Put(
           new Register {
               UserName = session.UserName ?? session.Email,
               Email = session.Email,
               etc...
           });
    
       if (authResponse is IHttpError)
         throw (Exception)authResponse;
    }
    

    【讨论】:

      最近更新 更多