SocialBootstrap APIプロジェクトは、カスタム ユーザー セッションの OnAuthenticated() フックをオーバーライドすることで、認証が成功した後にコールバックを処理する例を示しています。
私は引き出して、いくつかを書き直し、いくつかの重要な部分を強調しました:
public class CustomUserSession : AuthUserSession
{
public override void OnAuthenticated(IServiceBase authService,
IAuthSession session,
IOAuthTokens tokens,
Dictionary<string, string> authInfo)
{
base.OnAuthenticated(authService, session, tokens, authInfo);
//Populate matching fields from this session into your own MyUserTable
var user = session.TranslateTo<MyUserTable>();
user.Id = int.Parse(session.UserAuthId);
user.GravatarImageUrl64 = CreateGravatarUrl(session.Email, 64);
foreach (var authToken in session.ProviderOAuthAccess)
{
if (authToken.Provider == FacebookAuthProvider.Name)
{
user.FacebookName = authToken.DisplayName;
user.FacebookFirstName = authToken.FirstName;
user.FacebookLastName = authToken.LastName;
user.FacebookEmail = authToken.Email;
}
else if (authToken.Provider == TwitterAuthProvider.Name)
{
user.TwitterName = authToken.DisplayName;
}
}
//Resolve the DbFactory from the IOC and persist the user info
using (var db = authService.TryResolve<IDbConnectionFactory>().Open())
{
//Update (if exists) or insert populated data into 'MyUserTable'
db.Save(user);
}
}
//Change `IsAuthorized` to only verify users authenticated with Credentials
public override bool IsAuthorized(string provider)
{
if (provider != AuthService.CredentialsProvider) return false;
return base.IsAuthorized(provider);
}
}
基本的に、このユーザー定義のカスタム ロジック (認証が成功するたびに起動される) は、UserSession からデータを抽出し、それをカスタム 'MyUserTable' に格納します。
IsAuthorized
また、CredentialsAuth で認証されたユーザーのみを受け入れるという意味をオーバーライドしました。
このデータを使用して、残りの登録を完了することができます。
その他の可能なカスタマイズ
ServiceStack の組み込み Auth は AuthData を保持し、Session を自動的に設定します。追加の検証アサーションを追加する場合は、追加のカスタム ロジックを含める代わりに、独自のカスタム [Authentication] 属性を使用できます。組み込みのAuthenticateAttributeの実装を参考にしてください。