C# 在ServiceStack中进行身份验证后如何重定向
我已覆盖CredentialAuthProvider,如下所示:C# 在ServiceStack中进行身份验证后如何重定向,c#,.net,servicestack,C#,.net,servicestack,我已覆盖CredentialAuthProvider,如下所示: public override bool TryAuthenticate(IServiceBase authService, string userName, string password) { //TODO: Auth the user and return if valid login return true; } public overrid
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
}
public override bool TryAuthenticate(IServiceBase authService、字符串用户名、字符串密码)
{
//TODO:对用户进行身份验证,如果登录有效,则返回
返回true;
}
已验证的公用覆盖无效(IServiceBase authService、IAAuthSession会话、IOAuthTokens令牌、字典authInfo)
{
base.OnAuthenticated(authService、会话、令牌、authInfo);
//用户已通过身份验证
//从数据库中查找用户的角色
如果(roleA)
//转到mypage1
if(roleB)
//转到mypage2
}
我执行一个简单的post to ~/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);
}
}
公共类CustomCredentialAuthProvider:CredentialAuthProvider
{
公共覆盖bool TryAuthenticate(IServiceBase authService、字符串用户名、字符串密码)
{
返回true;
}
已验证的公用覆盖无效(IServiceBase authService、IAAuthSession会话、IOAuthTokens令牌、字典authInfo)
{
session.refererURL=”http://www.msn.com";
base.OnAuthenticated(authService、会话、令牌、authInfo);
}
}
以及邮寄表格:
<form method="POST" action="/auth/credentials">
<input name="UserName"/>
<input name="Password" type="password"/>
<input type="submit"/>
</form>
按照优先顺序,您可以在不同的位置设置要重定向到的Url:
/auth
Session.refererURL
Url会话.refererURL
,因此您可以执行以下操作:
if (roleA) session.ReferrerUrl = "http://myPage1Url";
if (roleB) session.ReferrerUrl = "http://myPage2Url";
迈兹
做这个OSS很不错。:)
关于优先顺序,您是正确的:
AuthService.cs
:
var referrerUrl = request.Continue
?? session.ReferrerUrl
?? this.RequestContext.GetHeader("Referer")
?? oAuthConfig.CallbackUrl;
if (!(response is IHttpResult))
{
return new HttpResult(response) {
Location = referrerUrl
};
}
默认情况下,refererURL将具有来自请求的Referer头值。这就是将分配给位置标题的内容,该位置标题位于AuthService.cs
的Post
方法的下方:
var referrerUrl = request.Continue
?? session.ReferrerUrl
?? this.RequestContext.GetHeader("Referer")
?? oAuthConfig.CallbackUrl;
if (!(response is IHttpResult))
{
return new HttpResult(response) {
Location = referrerUrl
};
}
一旦经过身份验证,并且在此处设置了会话.refererURL
,响应将发送到客户端,并将上面的Location属性设置为原始referer,而不是下面的值:
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
session.ReferrerUrl = "http://www.msn.com";
}
需要在调用auth后确定。这起作用了……某种程度上……行为如下:我必须提交两次表单。这是我的设置:我在登录表单所在的根目录中有一个default.cshtml内容页。看着fiddler,我能看到的唯一区别是,第一次加载页面时,我没有ss id cookie。提交表单后,服务器会将我发送回default.cshtml。但是这次是用ss-id。如果我第二次提交的话,你描述的重定向是有效的。ss id是怎么回事?请注意,我确实得到了ss pid,并且我有插件;在AppHost中,
ss id
在Ok中描述。为了确保我不会发疯,我安装了Starter ASP.NET网站模板-ServiceStact nuget包。这是一个简单的表单:和身份验证提供者:就是它。使用starter模板运行它,您将看到在重定向到msn.com之前必须发布两次。您是从ServiceStack页面或其他页面加载HTML表单的第一个页面吗?同意,已修复,可在本周末的下一版本ServiceStack中提供。顺便说一句,请随意发送一个拉请求,以获取类似以下内容:)太棒了。下一次就可以了,顺便说一句,框架很棒。我不会回头看。。。我相信你以前听过这个,但是SS需要更多的文档和最佳实践。我认为这已经相当全面了。这是一个社区维基,所以如果你觉得有什么可以改进的,可以随意添加。