4

フォーム認証を使用していくつかのミリ秒ライトスイッチ アプリケーションを作成しました。これにより、SQL サーバーに aspnet_* テーブルが作成されます。サービススタック (アプリケーション) で定義されたユーザー、パスワード、メンバーシップ、ロール、およびアプリケーション権限を使用するにはどうすればよいですか?

4

1 に答える 1

6

私はこれをテストしていませんが、開始する必要があると思います。私のステップのいずれかで喜んで直してください。

あなたがする必要があると思うこと..

  • 両方の「システム」に対して認証するには、フォーム Cookie を設定し、ServiceStack セッションを保存する必要があります。

呼び出す代わりに、以下のFormsAuthentication.Authentiate()ようなことをしてください。すべての手順を完了するまで、これは機能しません。

var apiAuthService = AppHostBase.Resolve<AuthService>();
apiAuthService.RequestContext = System.Web.HttpContext.Current.ToRequestContext();
var apiResponse = apiAuthService.Authenticate(new Auth
{
    UserName = model.UserName,
    Password = model.Password,
    RememberMe = false
});
  • のサブクラスを作成しますIUserAuthRepository(aspnet_* テーブルからメンバーシップ/ユーザー/ロールを取得し、ServiceStack AuthUser を埋めるため)。

CustomAuthRepository.cs (不完全ですが、開始する必要があります)

public class CustomAuthRepository : IUserAuthRepository
{
    private readonly MembershipProvider _membershipProvider;
    private readonly RoleProvider _roleProvider;

    public CustomAuthRepository()
    {
        _membershipProvider = Membership.Provider;
        _roleProvider = Roles.Provider;
    }

    public UserAuth GetUserAuthByUserName(string userNameOrEmail)
    {
        var user = _membershipProvider.GetUser(userNameOrEmail, true);
        return new UserAuth {FirstName = user.UserName, Roles = _roleProvider.GetRolesForUser(userNameOrEmail).ToList() //FILL IN REST OF PROPERTIES};
    }

    public bool TryAuthenticate(string userName, string password, out UserAuth userAuth)
    {
        //userId = null;
        userAuth = GetUserAuthByUserName(userName);
        if (userAuth == null) return false;

        if (FormsAuthentication.Authenticate(userName, password))
        {
            FormsAuthentication.SetAuthCookie(userName, false);
            return true;
        }

        userAuth = null;
        return false;
    }
//MORE METHODS TO IMPLEMENT...
}
  • AppHost 構成メソッドで ServiceStack のワイヤー認証をアップ。

    var userRep = new CustomAuthRepository();
    
    container.Register<IUserAuthRepository>(userRep);
    
    Plugins.Add(
        new AuthFeature(() => new AuthUserSession(),
            new IAuthProvider[] {
                new CredentialsAuthProvider() 
            }
        ));
    
于 2013-02-25T23:09:40.177 に答える