我已经覆盖了CredentialsAuthProvider,如下所示:
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
//TODO: Auth the user and return if valid login
return true;
}
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
//User has been authenticated
//Find the user's role form the DB
if (roleA)
//GOTO mypage1
if (roleB)
//GOTO mypage2
}
我对〜/ auth / Credentials执行一个简单的帖子,当身份验证工作并调用OnAuthenticated方法时,如何根据角色或类似内容将用户重定向到适当的页面?
我厌倦了在OnAuthenticated方法中执行以下操作,但它没有达到预期的效果:
authService( “/视图/客户”);
使用简化模板进行更新(请参阅下面的评论):
public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
{
return true;
}
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
session.ReferrerUrl = "http://www.msn.com";
base.OnAuthenticated(authService, session, tokens, authInfo);
}
}
要发布的表格:
<form method="POST" action="/auth/credentials">
<input name="UserName"/>
<input name="Password" type="password"/>
<input type="submit"/>
</form>
答案 0 :(得分:7)
您可以按照优先顺序在ServiceStack Authentication期间将Url设置为重定向到的不同位置:
/auth
提出请求时继续 QueryString,FormData或Request DTO变量Session.ReferrerUrl
网址根据这些偏好顺序,如果请求没有继续参数,则应使用session.ReferrerUrl
,因此您可以这样做:
if (roleA) session.ReferrerUrl = "http://myPage1Url";
if (roleB) session.ReferrerUrl = "http://myPage2Url";
答案 1 :(得分:2)
mythz,
很好地致力于制作这个OSS。 :)
关于优先顺序你是对的:
所以在我的例子中,我没有Continue QueryString,Form Data或Request DTO变量,我没有CallbackUrl,当然也没有Session.ReferrerUrl,因为这是Session的第一篇文章。
来自AuthService.cs
:
var referrerUrl = request.Continue
?? session.ReferrerUrl
?? this.RequestContext.GetHeader("Referer")
?? oAuthConfig.CallbackUrl;
默认情况下,referrerUrl将具有来自请求的Referer标头值。这就是将Post
的{{1}}方法下方的位置标题分配的内容:
AuthService.cs
经过身份验证,此处设置了if (!(response is IHttpResult))
{
return new HttpResult(response) {
Location = referrerUrl
};
}
,响应将发送到客户端,并将上面的位置属性设置为原始引荐来源,而不是以下值:
session.ReferrerUrl
只有在同一会话的第二个POST上,客户端才会导航到www.msn.com(在此示例中),因为会话已经填充。我想这个:
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
session.ReferrerUrl = "http://www.msn.com";
}
需要在致电身份验证后确定。