サービススタックの認証と登録機能を拡張しようとしています。私は、認証と登録がうまく動作しているが、私は各ユーザのカスタムデータを追加する必要がある。 Service Stackのドキュメントや他のさまざまな投稿から、UserAuthテーブルに組み込まれているMetaDataカラムを使用して独自のデータを追加できます。これは、メタデータを設定するための偉大な働いているサービススタック認証の拡張 - カスタムユーザー認証メタデータによるユーザーセッションの設定
public class CustomAuthRepository : OrmLiteAuthRepository, IUserAuthRepository
{
public UserAuth CreateUserAuth(UserAuth newUser, string password)
{
newUser.Set(new LoginInfo
{
IsActive = false,
PasswordNeedsReset = true
});
return base.CreateUserAuth(newUser, password);
}
}
、私はシリアル化されたバージョンで終わる:
私はので、私はUSERAUTHのメタデータプロパティを設定することができCustomAuthRepositoryを作成したが、ここに私のカスタムレポですUserAuthテーブルのメタデータ列にあるLoginInfoオブジェクト。
私がしようとしているのは、ユーザーが認証したときに、そのメタデータの一部に基づいてAuthResponseを変更する必要がある場合です。たとえば、ユーザーがまだアクティブ化されていない場合は、プロパティ付きのAuthResponseを返すようにします。IsActive = get value from custom meta data
私は自分のカスタムメタデータをAuthSessionに取得できると思います。私はAuthSessionに何があるかに基づいて、レスポンスオブジェクトを変更することができ、私のカスタム資格認証プロバイダにその方法:
public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
{
var customUserAuthSession = (CustomUserAuthSession)session;
if (!customUserAuthSession.LoginInfo.IsActive)
{
return new
{
UserName = customUserAuthSession.UserName,
IsActive = customUserAuthSession.LoginInfo.IsActive
};
}
var isAuthenticated = base.Authenticate(authService, session, request);
return isAuthenticated;
}
}
私はこれについて正しい道を行く、またはカスタムメタデータを格納および取得するためのより良い方法があるアム?
ユーザーのカスタムメタデータに基づいてAuthResponseを変更するにはどうすればよいですか?
カスタムメタデータをAuthSessionに取得するにはどうすればよいですか?
私がやろうとしていることに近づいています。私CustomAuthSession OnAuthenticated()メソッドで:
public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{
var customUserAuthSession = (CustomUserAuthSession) session;
var userAuth = authService.ResolveService<IUserAuthRepository>().GetUserAuth(session, null);
customUserAuthSession.LoginInfo = userAuth.Get<LoginInfo>();
authService.SaveSession(customUserAuthSession);
base.OnAuthenticated(authService, session, tokens, authInfo);
}
私はUSERAUTHを再フェッチしていると私は必要なデータとのセッションを投入します。カスタムユーザーセッション用のサービススタックdocumentationに基づいて、いくつかのカスタムデータを入力した後でセッションを保存する必要があります。私はそれをやっていますが、それは貯蓄されていないようです。 CustomCredentialsAuthProviderのAuthenticateメソッドで、セッションに追加したカスタムデータが表示されません。
編集 上記の私の最初の編集での問題は、ユーザーが認証されることをである、そして我々は、彼らがアクティブになっているか、いない場合、私がチェックすることができCustomAuthSessionコードを取得。彼らが活動していない場合は、ログアウトする必要があります。理想的ではありません。
代わりに、私は自分のカスタムCredentialsAuthProviderのAuthenticateメソッドでこれをすべて行うことができます。
public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
{
var userAuthRepo = authService.ResolveService<IUserAuthRepository>();
var userAuth = userAuthRepo.GetUserAuthByUserName(request.UserName);
var loginInfo = userAuth.Get<LoginInfo>();
if (!loginInfo.IsActive)
{
return new CustomAuthResponse
{
UserName = userAuth.UserName,
ResponseStatus = new ResponseStatus("500"),
IsActive = loginInfo.IsActive
};
}
var authResponse = (AuthResponse)base.Authenticate(authService, session, request);
return authResponse;
}
私はUSERAUTHをフェッチし、ユーザーのisActiveかいないかどうかを確認するために、要求にユーザ名を使用することができ、リクエストが来ます。そうでなければ、サービススタックがそれらを認証する前に何らかのエラーを返すことができます。
私はこれがうまくいくと思っています。ユーザーがアクティブではないというエラーをクライアントに返すことができます。
誰かがこれを行うためのよりクリーンな方法を持っているなら、それはすばらしいでしょう。
このリンクはあなたに役立つかもしれません[ServiceStack.netのためのIAuthProviderのカスタマイズ - ステップバイステップ](http://enehana.nohea.com/general/customizing-iauthprovider-for-servicestack-net-step-by-step/ ) – stefan2410
そのリンクを読んでくれてありがとうございました。残念ながら、彼はUserAuthテーブルのメタデータ列からカスタムメタデータを取得/設定する方法を示していません。 CustomCredentialsAuthProviderのOnAuthenticatedメソッドでカスタムユーザーセッションにカスタムデータを追加しますが、その例では 'some_firstname_from_db'と表示されます。データベースから再度ユーザーをフェッチする方法を理解できれば、このメソッドでセッションを作成できます。このメソッドがサービススタックと呼ばれる時にはすでに自分の信用証明を確認してこのメソッドpost auth – officert
を呼び出したので、非常にきれいに見えません。もしあなたがそれらを見つけなかったら、[ここ](https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization#custom-authentication-and-authorization)と[こちら](http:// rossipedia。 (http://dylanbeattie.blogspot.gr/2013/08/building-servicestack-based-oauth2.html)を参照してください。 、[ここ](http://joeriks.com/2013/01/12/cors-basicauth-on-servicestack-with-custom-authentication/)ほとんどの人はSOサービスマンで活躍していますので、後で答えてくださいあなたの質問。 – stefan2410