我创建了一个调用一个TestService的AuthenticateService
并对用户进行认证。 在致电我清除了所有我的cookies,以确保一旦我得到的回应,我得到了TestService的ss-id
和ss-pid
饼干,我做得到。
AppHost
配置:(SS v4.0.8.0)
//Plugins
Plugins.Add(new RazorFormat());
Plugins.Add(new SessionFeature());
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[] { new CustomCredentialsAuthProvider() }));
container.Register<ICacheClient>(new MemoryCacheClient());
我CustomCredentialsAuthProvider
:
public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
// Custom Auth Logic
// Return true if credentials are valid, otherwise false
// bool isValid = Membership.ValidateUser(userName, password);
return true;
}
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
var loginManager = authService.TryResolve<LoginManager>();
var loginInfo = loginManager.GetLoginInfo(session.UserAuthName);
authService.SaveSession(loginInfo.CustomUserSession, SessionExpiry);
}
}
我TestService
:
public class TestService : Service
{
public object Any(Test request)
{
var response = new TestResponse();
var authService = base.ResolveService<AuthenticateService>();
var authResponse = authService.Authenticate(new Authenticate
{
UserName = "user",
Password = "password",
RememberMe = false
});
base.Request.ResponseContentType = MimeTypes.Html; //Temporary workaround, will not be needed in v4.0.9+
return response;
}
}
因此,回顾一下。 我打的TestService的,认证用户,返回响应,确保响应包含ss-id
和ss-pid
饼干。 现在,我试着打有其他业务[Authenticate]
属性。 我在服务断点嗟和我在浏览器这个响应。
处理程序请求未找到:
Request.HttpMethod:GET Request的PathInfo:/登录的Request.QueryString:ServiceStack.NameValueCollectionWrapper
Request.RawUrl:?/登录重定向= HTTP%3A%2F%2flocalhost%3a50063%2fBOP%2fbasic-INFO-2
我已经尝试应用[Authenticate]
在服务方法和在整个服务属性,具有相同的结果。 我已经测试了,我能得到的服务方法,如果[Authenticate]
属性已被注释掉,它的工作原理,所以它不是服务配置问题或路由问题。
我还创建了两个服务方法/basic-info-1
和/basic-info-2
/basic-info-2
具有[Authenticate]
属性和basic-info-1
不。 认证后,我能够得到basic-info-1
没有问题,也证实了我可以为所保存的会话信息OnAuthenticated()
方法。 对于/basic-info-2
我得到的处理程序错误。
我不知道在发生什么事[Authenticate]
属性,但是从处理程序错误的外观上来看,认证失败和SS试图重定向我/login
不我的项目,因此在处理错误存在。 但不知为何,身份验证属性是不承认我的ss-id
和ss-pid
饼干?