尝试使用ServiceStack进行身份验证,并将其重定向到登录页面,如下所示:
Plugins.Add(new AuthFeature(
() => new CustomUserSession(), //Use your own typed Custom UserSession type
new IAuthProvider[] {
new CredentialsAuthProvider(), //HTML Form post of UserName/Password credentials
new TwitterAuthProvider(appSettings), //Sign-in with Twitter
new FacebookAuthProvider(appSettings), //Sign-in with Facebook
new DigestAuthProvider(appSettings), //Sign-in with Digest Auth
new BasicAuthProvider(), //Sign-in with Basic Auth
new GoogleOpenIdOAuthProvider(appSettings), //Sign-in with Google OpenId
new YahooOpenIdOAuthProvider(appSettings), //Sign-in with Yahoo OpenId
new OpenIdOAuthProvider(appSettings), //Sign-in with Custom OpenId
}, "http://www.anyURIhereisignored.com"));
然而,在这种情况下“http://www.anyURIhereisignored.com”的URI参数被忽略。
查看AuthFeature的类定义,我看到htmlRedirect参数被声明为可选,默认值为“〜/ login”,但看起来它总是使用该值并忽略传入的任何内容。似乎虽然htmlRedirect值最初设置为传递的URI,但不知何故在内部它永远不会使用它,而是始终默认为“〜/ login”。还有其他人遇到同样的问题吗?
答案 0 :(得分:1)
我将自定义URI设置为“〜/ account”,它运行正常。我尝试将其更改为谷歌,结果正如您所寻找的那样:
https://www.google.co.uk/?redirect=http://localhost/secure
您是否覆盖了属性中的重定向,表明需要进行身份验证,即
[Authenticate(ApplyTo.All,"~/login")]
答案 1 :(得分:1)
如果您正在使用MVC4并且您的控制器继承自ServiceStackController<>根据ServiceStack doco,您可能想尝试重写LoginRedirectUrl属性:
public override string LoginRedirectUrl
{
get { return "/Account/Login?redirect={0}"; }
}
这会将任何未经身份验证的安全操作请求重定向到由指定值组成的登录网址。
如果要在MVC中使用ServiceStack auth,还应确保从web.config中删除ASP.NET成员资格模块。