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

ServiceStack RequiredRole is resetting my expiry (time to live) to 2 weeks

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

我最初在自定义 CredentialsAuthProvider class 的 OnAuthenticated 中设置了 SessionExpiry,并且没有在任何其他地方手动更改 SessionExpiry在应用程序中(目前没有 sliding session expirations - 双关语)。

如有任何帮助,我们将不胜感激!

每次保存会话时,它都会使用默认会话到期时间再次保存,您可以在顶层为临时会话指定 AuthFeature.SessionExpiry 或为永久(记住我)会话指定 AuthFeature.PermanentSessionExpiry

您还可以在每次保存 Session 时进行拦截,并通过覆盖 AppHost 中的 OnSaveSession 来更改保存的 Session Expiry:

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