2015-12-24 12 views
0

Я создаю веб-сайт с платформой воспроизведения 2.4, в которой пользователь будет самым важным объектом.SecureSocial: расширение атрибутов BasicProfile в Securesocial 3.0-M4, игра 2.4

Я хотел бы использовать модуль securesocial (3.0-M4) с именем пользователя/паролем или стратегией регистрации по электронной почте/паролю, но я не могу найти лучший способ расширить класс BasicProfile, чтобы добавить больше атрибутов, чем те, которые уже реализованы в класс по умолчанию (например: fisrtname, фамилия, адрес электронной почты, и т.д. ...)

Я хотел бы добавить атрибуты, такие как: - гендерные - DateOfBirth - ...

Если кто-то знает лучше чтобы продолжить, я был бы очень доволен! : D

Я прошел через весь документ тысячу раз и почти через всю сеть. Я думаю, что следующий шаг для меня - повесить себя: P

ответ

0

Насколько я понимаю, 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 в профиль пользователя. Надеюсь, это поможет.

+0

Привет, спасибо за ваш ответ. Я пришел к такому выводу, и я нашел это немного сложным, и в конечном итоге процесс регистрации для меня не является достаточно гибким. Поэтому я решил попробовать новую ассоциацию deadbolt 2 и play-authenticate, которая, кажется, предлагает лучшее решение, которое я мог бы найти в java для моего проекта. Я пришел из мира php, и я действительно хочу освоить Java, но я был удивлен, увидев, что в нем нет такого плагина, как я думал. Знаете ли вы хорошую платформу для поиска лучших ресурсов для разработки web/rest-api в игре? Еще раз спасибо за ваш ответ. – Jblondeau