1

登录.cshtml

....
<form action="/auth/credentials">
    <div>
        <span>User Name</span>
        <input name="userName" type="text"/>
    </div><div>
        <span>Password</span>
        <input name="password" type="password"/>
    </div><div>
        <input name="RememberMe" type="checkbox" checked value="true"/>
        <span>Remember me</span>
    </div><div>
        <button class="login">Sign in</button>
    </div>
</form>
....

登录服务.cs

[DefaultView("login")]
public class LoginService : BaseService {
    public object Get(Login req) {
        return new LoginResponse() { UserSession = base.UserSession };
    }
}

BaseService.cs

....
public CustomUserSession UserSession {
    get {
        return SessionAs<CustomUserSession>(); // **** Error here ****        
    }
}
....

错误消息SessionAs<CustomUserSession>();

用户代码未处理 InvalidCastException

无法将“ServiceStack.ServiceInterface.Auth.AuthUserSession”类型的对象转换为“MyProject.CustomUserSession”类型。

我有一个简单的 html 表单login.cshtml来测试凭据身份验证功能。该代码模仿了 SocialBootstrapApi 演示项目的凭据身份验证功能部分。

在我从 NuGet 更新 SS 之前:(大约 40 天前的软件包)

如果 html 表单有RememberMe div,SessionAs<CustomUserSession>();会遇到InvalidCastException错误。否则,它可以很好地与 justUserNamePassworddiv 一起使用。

在我从 NuGet 更新 SS 之后:(今天 11 月 4 日更新包 v3.9.25.0)

SessionAs<CustomUserSession>();InvalidCastException即使 html 表单中只有UserNamePassworddiv 也总是会遇到错误。

我不确定我在铸造过程中做错了什么。请帮忙。

4

1 回答 1

2

您的身份验证注册是什么样的?

这是SocialBootstrapApi项目的 AuthConfig 的样子:

Plugins.Add(new AuthFeature(
    () => new CustomUserSession(), //Use your own typed Custom UserSession type
    new IAuthProvider[] {
        new CredentialsAuthProvider(),              //HTML Form post 
        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 Goolge OpenId
        new YahooOpenIdOAuthProvider(appSettings),  //Sign-in with Yahoo OpenId
        new OpenIdOAuthProvider(appSettings),       //Sign-in with Custom OpenId
    }));

new CustomUserSession()就是告诉 ServiceStack 使用 Custom Session 而不是内置的 default 的原因AuthUserSession

您使用的是什么 CacheClient?

于 2012-11-04T03:35:59.877 回答