Вы можете зарегистрировать дополнительные области в коллекции GoogleAuthProvider.Scopes
, которая по умолчанию заполнена :
this.Scopes = new[] {
"https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email"
};
Информация OAuth от всех OAuth-провайдеров ServiceStack заполнены в зарегистрированном Auth Repository в таблице UserAuthDetails , где токен доступа хранится в AccessTokenSecret
.
Вы можете получить дополнительную информацию о пользователе, используя Доступ к токену и переопределение CreateAuthInfo
в пользовательском GoogleAuthProvider
и переопределение реализации CreateAuthInfo()
, которая по умолчанию извлекает базовую c информацию о пользователе из UserProfileUrl
(https://www.googleapis.com/oauth2/v2/userinfo):
protected override Dictionary<string, string> CreateAuthInfo(string accessToken)
{
var url = this.UserProfileUrl.AddQueryParam("access_token", accessToken);
var json = url.GetJsonFromUrl();
var obj = JsonObject.Parse(json);
obj.MoveKey("id", "user_id");
obj.MoveKey("given_name", "first_name");
obj.MoveKey("family_name", "last_name");
obj.MoveKey("picture", AuthMetadataProvider.ProfileUrlKey, profileUrl => profileUrl.SanitizeOAuthUrl());
return obj;
}
Возвращенный словарь заполняет все общеизвестные свойства в UserAuthDetails
в переопределяемом LoadUserAuthInfo () (который может альтернативно перехватываться с LoadUserAuthFilter
на каждом AuthProvider). Все остальные несоответствующие свойства в словаре сохраняются в словаре Items
в таблице UserAuthDetails
.