Login.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>
....
LoginService.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'。
我在login.cshtml
中有一个简单的html表单来测试凭据身份验证功能。该代码模仿SocialBootstrapApi演示项目的凭证身份验证功能部分。
在我从NuGet更新SS之前:(大约40天前的包裹)
如果html表单有RememberMe div
,则SessionAs<CustomUserSession>();
会出现InvalidCastException
错误。否则,只有UserName
和Password
div才能正常工作。
我从NuGet更新SS后(软件包今天更新于11月4日v3.9.25.0)
即使html表单中包含SessionAs<CustomUserSession>();
和InvalidCastException
div, UserName
始终会遇到Password
错误。
我不确定在铸造过程中我做错了什么。请帮忙。
答案 0 :(得分: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使用自定义会话而不是内置的默认AuthUserSession
。
你使用的是什么CacheClient?