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