1

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ます。それ以外の場合は、ジャストUserNamePassworddivが含まれていれば問題なく動作します。

NuGetからSSを更新した後:(パッケージは本日11月4日v3.9.25.0で更新されました)

SessionAs<CustomUserSession>();InvalidCastExceptionhtmlフォームにUserNameとdivが含まれている場合でも、常にエラーが発生Passwordします。

キャストの過程で何を間違えたのかわかりません。助けてください。

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に指示するものですAuthUserSession

そして、どのCacheClientを使用していますか?

于 2012-11-04T03:35:59.877 に答える