Насколько я понимаю, BasicProfile обозначает минимальную информацию, общую для всех поставщиков Auth. Хотя это может быть не 100% истинным, я считаю, что это было предположение за BasicProfile
. Существует currently an issue open on GitHub, чтобы изменить это, а также PR, который предположительно исправляет его (я никогда не пробовал, чтобы быть честным).
На мой взгляд, лучшим выбором на данный момент было бы использовать шаблон декоратора/адаптера/обертки и методы записи, которые конвертируются между вашим пользователем и BasicProfile. Если предположить, что используют Java, PlayFramework и Ebeans, вы могли бы сделать что-то вроде ниже (изменить его в соответствии с вашими потребностями):
public class UserProfile extends Model{
//Fields from BasicProfile
public String providerId;
public String firstName;
public String lastName;
public String fullName;
public String email;
public String avatarUrl;
String gender;
Date dateOfBirth;
//Define other custom fields
//Your custom PasswordInfo model
public PasswordInfo passwordInfo;
public UserProfile(BasicProfile basicProfile) {
this.providerId = basicProfile.providerId();
// this.authUserId = Long.valueOf(profile.);
if (basicProfile.firstName().isDefined())
firstName = basicProfile.firstName().get();
if (basicProfile.lastName().isDefined())
lastName = basicProfile.lastName().get();
if (basicProfile.fullName().isDefined())
fullName = basicProfile.fullName().get();
if (basicProfile.email().isDefined())
email = basicProfile.email().get();
if (basicProfile.avatarUrl().isDefined())
avatarUrl = basicProfile.avatarUrl().get();
if (basicProfile.passwordInfo().isDefined()) {
String hasher = basicProfile.passwordInfo().get().hasher();
String password = basicProfile.passwordInfo().get().password();
String salt = basicProfile.passwordInfo().get().salt().isDefined() ? basicProfile.passwordInfo().get().salt().get()
: null;
//Your own custom PasswordInfo model (not securesocial)
passwordInfo = new PasswordInfo(hasher, password, salt, this);
}
}
public BasicProfile getSecureSocialBasicProfile() {
BasicProfile basicProfile = null;
final scala.Option<securesocial.core.PasswordInfo> info = scala.Option.apply(
new securesocial.core.PasswordInfo(passwordInfo.hasher, passwordInfo.password, scala.Option.apply(passwordInfo.salt)));
basicProfile = new BasicProfile(providerId, id.toString(), scala.Option.apply(firstName),
scala.Option.apply(lastName), scala.Option.apply(fullName), scala.Option.apply(email),
scala.Option.apply(avatarUrl), AuthenticationMethod.UserPassword(), scala.Option.empty(),
scala.Option.empty(), info);
return basicProfile;
}
.....
.....
}
С выше модели и методы для преобразования туда и обратно, вы можете легко добавить свои свойства/attributes в профиль пользователя. Надеюсь, это поможет.
Привет, спасибо за ваш ответ. Я пришел к такому выводу, и я нашел это немного сложным, и в конечном итоге процесс регистрации для меня не является достаточно гибким. Поэтому я решил попробовать новую ассоциацию deadbolt 2 и play-authenticate, которая, кажется, предлагает лучшее решение, которое я мог бы найти в java для моего проекта. Я пришел из мира php, и я действительно хочу освоить Java, но я был удивлен, увидев, что в нем нет такого плагина, как я думал. Знаете ли вы хорошую платформу для поиска лучших ресурсов для разработки web/rest-api в игре? Еще раз спасибо за ваш ответ. – Jblondeau