这是ServiceStack / Authentication中的错误吗?

时间:2013-08-07 17:12:23

标签: asp.net-mvc-4 servicestack

尝试使用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”。还有其他人遇到同样的问题吗?

2 个答案:

答案 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成员资格模块。