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

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

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

直接的方法是:创建一个 UserAuth 对象,用来自 IAuthSession 的所有字段填充它,获取 IDbConnectionFactory,保存它。

当然有更快更好的方法,但我找不到它!

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

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

一旦你添加了你需要的东西,你如何保存它? (我怀疑您只是将元数据添加到 session 和 UserAuth,然后您使用 IDbConnectionFactory 保存后者;一定有更好的方法!)

最佳答案

老问题,但值得回答。

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

UpdateUserAuth(UserAuth existingUser, UserAuth newUser, string password)

另一种更简单的方法是使用 RegisterService 调用 PUT ,它将为您更新现有的注册用户。
/// <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;
}

关于authentication - 如何在 ServiceStack 中更新用户数据表单 session ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17813438/

10-11 13:12