我使用ServiceStack和Redis来存储会话。会话到期时间是根据每个用户设置的。对于这些特定的服务方法来说,这一切都很有效,这些方法的副作用是,当我使用[RequiredRole(Roles.Admin)]
时,将TTL (生命时间)更改为默认的2周,但是仅仅使用[Authenticate]
并不存在任何问题。
using Repositories.DTO;
using ServiceStack;
using ServiceStack.Auth;
namespace WebApi.Controllers
{
public class RegistrationService : RegisterService
{
private readonly RegistrationRepo _repo;
public RegistrationService(RegistrationRepo repo)
{
_repo = repo;
}
[Authenticate] // No problems
public object Put(RegistrationRequest registration)
{
var result = _repo.UpdateUser(registration.user);
return new
{
user = result
};
}
[Authenticate]
[RequiredRole(Roles.Admin)] //Problems. Expiry resets to 2 weeks
public object Post(RegistrationRequest registration)
{
var result = _repo.UpdateUser(registration.user);
return new
{
user = result
};
}
我最初在自定义SessionExpiry
类的OnAuthenticated
中设置了CredentialsAuthProvider
,并且不手动更改应用程序中的任何其他位置(此时没有滑动期呼气 )。
任何帮助都将不胜感激!
发布于 2015-10-02 13:26:37
每次保存会话时,都会再次保存默认会话到期时间,您可以在顶层的临时会话AuthFeature.SessionExpiry
或永久会话(记住我)会话中指定AuthFeature.PermanentSessionExpiry
。
您还可以在每次保存会话时拦截会话,并通过在OnSaveSession
中重写AppHost来更改保存会话的到期日期:
public override void OnSaveSession(
IRequest httpReq, IAuthSession session, TimeSpan? expiresIn = null)
{
var customExpiry = ...
base.OnSaveSession(httpReq, session, customExpiry);
}
https://stackoverflow.com/questions/32915347
复制相似问题