RegisterService 소스 코드 사본을 사용하여 사용자 등록 서비스를 포함하고 필요에 맞게 수정할 수 있습니다. 원하는 추가 특성을 가진 사용자 정의 Register DTO을 사용하십시오.
그러나 당신은 쉽게 당신이 당신의 서비스 내에서 액세스 할 수있는 이는 ?querystring
에 추가하여 기존 등록 DTO를 변경하지 않고 추가 PARAMS을 전달할 수 있습니다 등록 중에 사용자 정의 로직 추가
var myParam = base.Request.QueryString["myParam"];
그렇지 않으면 방법 또는 인증은 기존 Session or Auth Events에 접속하는 것입니다. 그들이 GitHub의이나 트위터를 통해 로그인 할 때 사용자의 프로필 URL을 가져옵니다
public class CustomUserSession : AuthUserSession
{
public string DefaultProfileUrl { get; set; }
public string GithubProfileUrl { get; set; }
public string TwitterProfileUrl { get; set; }
public override void OnAuthenticated(IServiceBase authService,
IAuthSession session,
IAuthTokens tokens,
Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
var appSettings = authService.TryResolve<IAppSettings>();
var userAuthRepo = authService.TryResolve<IAuthRepository>();
var userAuth = userAuthRepo.GetUserAuth(session, tokens);
var dbConnectionFactory = authService.TryResolve<IDbConnectionFactory>();
foreach (var authTokens in session.ProviderOAuthAccess)
{
if (authTokens.Provider.ToLower() == "github")
{
GithubProfileUrl = session.GetProfileUrl();
}
if (authTokens.Provider.ToLower() == "twitter")
{
TwitterProfileUrl = session.GetProfileUrl();
if (appSettings.GetList("TwitterAdmins").Contains(session.UserName)
&& !session.HasRole(RoleNames.Admin))
{
userAuthRepo.AssignRoles(userAuth, roles:new[]{RoleNames.Admin});
}
}
DefaultProfileUrl = GithubProfileUrl ?? TwitterProfileUrl;
using (var db = dbConnectionFactory.OpenDbConnection())
{
var userAuthInstance = db.Single<CustomUserAuth>(x =>
x.Id == this.UserAuthId.ToInt());
if (userAuthInstance != null)
{
userAuthInstance.DefaultProfileUrl = this.DefaultProfileUrl;
db.Save(userAuthInstance);
}
}
}
}
}
:
TechStacks는 CustomAuthUserSession이의 예를 가지고있다. 관리자 역할을 TwitterAdminsAppSetting의 사용자에게 할당합니다. 이는 알려진 트위터 사용자에게 관리자 권한을 할당하는 방법입니다. 마지막으로 검색된 프로필 URL이 CustomUserAuth
POCO 테이블에 추가되어 저장됩니다.
TechStacks은 registering a generic OrmLiteAuthRepository에 의해 대신 자신의 CustomUserAuth 테이블을 사용하는 ServiceStack을 알려줍니다
var authRepo = new OrmLiteAuthRepository<CustomUserAuth, UserAuthDetails>(dbFactory);
container.Register<IUserAuthRepository>(authRepo);
authRepo.InitSchema();
지금 대신 기본 UserAuth
테이블의 CustomUserAuth
에서 사용자 정보를 저장합니다 곳.
전에 비슷한 코드를 보았지만 여기서 제시 한 방식을 보았을 때까지는 나에게 이해가되지 않았습니다. 당신의 도움을 주셔서 감사합니다. ServiceStack은 멋진 기능입니다 ... – user2033791
작은 업데이트 ... RefFI를 업데이트하기 위해 데이터베이스 트리거를 사용했습니다. 그게 잘 작동하는 것 같아요 그리고 내가 이미 쉽게 Servicestack 인증 루틴을 사용하자. – user2033791