[英]How do I redirect after authentication in ServiceStack
我像这样覆盖了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);
}
}
和POST的形式:
<form method="POST" action="/auth/credentials">
<input name="UserName"/>
<input name="Password" type="password"/>
<input type="submit"/>
</form>
您可以在ServiceStack身份验证期间按优先顺序将Url设置为重定向到的不同位置:
/auth
发出请求时, 继续 QueryString,FormData或Request DTO变量 Session.ReferrerUrl
Url 根据这些首选项顺序,如果请求没有Continue参数,则应使用session.ReferrerUrl
,因此您可以执行以下操作:
if (roleA) session.ReferrerUrl = "http://myPage1Url";
if (roleB) session.ReferrerUrl = "http://myPage2Url";
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标头值。 这就是将在AuthService.cs
的Post
方法中进一步分配给Location头的AuthService.cs
:
if (!(response is IHttpResult))
{
return new HttpResult(response) {
Location = referrerUrl
};
}
一旦经过身份验证,并在此处设置session.ReferrerUrl
,响应将被发送到客户端,并将上面的Location属性设置为原始referrer,而不是以下值:
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
session.ReferrerUrl = "http://www.msn.com";
}
只有在同一会话的第二个POST上,客户端才会导航到www.msn.com(在此示例中),因为会话已经填充。 我认为这:
var referrerUrl = request.Continue
?? session.ReferrerUrl
?? this.RequestContext.GetHeader("Referer")
?? oAuthConfig.CallbackUrl;
需要在致电身份验证后确定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.