ServiceStack RequiredRole正在将我的到期(生存时间)重置为2周

本文关键字:时间 2周 RequiredRole 我的 ServiceStack | 更新日期: 2023-09-27 18:15:40

我使用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设置在自定义CredentialsAuthProvider类的OnAuthenticated中,并且不要手动更改SessionExpiry在应用程序中的任何其他地方(此时没有滑动会话过期-双关语)。

任何帮助都将非常感激!

ServiceStack RequiredRole正在将我的到期(生存时间)重置为2周

每次会话保存时,它都会再次保存默认的会话过期,您可以在顶级AuthFeature.SessionExpiry中指定临时会话或AuthFeature.PermanentSessionExpiry中指定永久(记住我)会话。

你也可以截取每次会话保存的时间,并通过在AppHost中重写OnSaveSession来更改会话过期保存的时间:

public override void OnSaveSession(
    IRequest httpReq, IAuthSession session, TimeSpan? expiresIn = null)
{
    var customExpiry = ...
    base.OnSaveSession(httpReq, session, customExpiry);
}