4

サービス スタックの認証およびセッション プロバイダーを利用して、サービス スタック MVC パワーパックを使用して ASP.NET MVC 4 アプリを作成しています。ソーシャル ブートストラップ API プロジェクトから多くのロジックをコピーしています。私のコントローラーは、次の基本コントローラーから継承します。

public class ControllerBase : ServiceStackController<CustomUserSession>

これは次のように実装されます。

public class ControllerBase : ServiceStackController<CustomUserSession> {}

CustomUserSessionから継承AuthUserSession:

public class CustomUserSession : AuthUserSession

ログイン後、CustomUserSession OnAuthenticated()メソッドが実行されますが、コントローラーにリダイレクトしても、UserSessionデータが入力されません。

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
    base.OnAuthenticated(authService, session, tokens, authInfo);
    CustomFoo = "SOMETHING CUSTOM";

    // More stuff
}

public class MyController : ControllerBase
{
    public ActionResult Index()
    {
        // After having authenticated
        var isAuth = base.UserSession.IsAuthenticated; // This is always false
        var myCustomFoo = base.UserSession.CustomFoo; // This is always null

    }
}

ここで私が見逃しているものを見ることができますか?

4

2 に答える 2

2

ServiceStack Google グループ内の問題を参照してください - https://groups.google.com/forum/?fromgroups=#!topic/servicestack/5JGjCudURFU

MVC 内から JsonSeviceClient (または任意の serviceClient) で認証する場合、Cookie は MVC 要求/応答と共有されません。

MVC コントローラー内で ServiceStack に対して認証を行う場合、MVC HttpContext を ServiceStack に送信する必要があります。以下のようなものが動作するはずです...

var authService = AppHostBase.Resolve<AuthService>();
authService.RequestContext = System.Web.HttpContext.Current.ToRequestContext();
var response = authService.Authenticate(new Auth
{
  UserName = model.UserName,
  Password = model.Password,
  RememberMe = model.RememberMe
});
于 2013-02-14T22:33:03.337 に答える
1

IsAuthenticated を true に設定して、セッションを保存してみてください...

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
    base.OnAuthenticated(authService, session, tokens, authInfo);
    CustomFoo = "SOMETHING CUSTOM";
    session.IsAuthenticated = true;
    authService.SaveSession(session);

    // More stuff
}
于 2013-02-13T05:41:04.467 に答える