SecureSocial:在Securesocial 3.0-M4中扩展BasicProfile添加属性,播放2.4

时间:2015-12-24 17:20:42

标签: java scala playframework playframework-2.3 securesocial

我正在建立一个带有游戏框架2.4的网站,其中用户将是最重要的实体。

我想使用带有用户名/密码或电子邮件/密码注册策略的securesocial(3.0-M4)模块,但我找不到扩展BasicProfile类的最佳方法,以添加比已经实现的更多的属性在默认类中(例如:fisrtname,lastname,email等)

我想添加以下属性: - 性别 - 出生日期 - ......

如果有人知道继续进行的最佳方式,我会非常高兴! :d

我遍历整个文档一千次,几乎遍及整个网络。我认为下一步是我自己:P

1 个答案:

答案 0 :(得分:0)

据我了解,BasicProfile表示所有Auth提供程序通用的最小信息。虽然这可能不是100%真实,但我觉得这是BasicProfile背后的假设。 有currently an issue open on GitHub来改变这个,还有一个据说可以解决它的公关(我从来没有尝试过这样做)。

在我看来,目前最好的选择是使用装饰器/适配器/包装器模式并编写在用户和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;

    }

    .....
    .....

}

使用上述模型和方法来回转换,您可以轻松地将属性/属性添加到用户配置文件中。希望有所帮助。