如何在ServiceStack中更新用户数据表格会话?

时间:2013-07-23 14:42:15

标签: authentication servicestack

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

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

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

执行此操作的直接方法:创建一个UserAuth对象,使用IAuthSession中的所有字段对其进行弹性处理,获取IDbConnectionFactory,然后保存它。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

老问题但值得回答。

正在使用的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;
}