SecureSocial : 扩展 BasicProfile 在 Securesocial 3.0-M4 中添加属性,播放 2.4
SecureSocial : Extending BasicProfile adding attributes in Securesocial 3.0-M4, play 2.4
我正在使用 play framework 2.4 构建一个网站,其中用户将是最重要的实体。
我想使用具有 username/password 或 email/password 注册策略的 securesocial (3.0-M4) 模块,但我找不到扩展 BasicProfile 的最佳方法 class添加比默认 class 中已实现的属性更多的属性(例如:名字、姓氏、电子邮件等...)
我想添加如下属性:
- 性别
- 出生日期
- ...
如果有人知道继续进行的最佳方式,我将非常高兴! :D
我浏览了整个文档一千遍,几乎浏览了整个网络。我想我的下一步是上吊 :P
据我了解,BasicProfile 表示所有 Auth 提供程序共有的最少信息。虽然这可能不是 100% 正确,但我认为这是 BasicProfile
背后的假设。
有 currently an issue open on GitHub 来改变这个,还有一个 PR 据说可以修复它(老实说,我从来没有尝试过)。
在我看来,您目前最好的选择是使用 decorator/adapter/wrapper 模式并编写在您的用户和 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;
}
.....
.....
}
通过上述模型和方法来回转换,您可以轻松地将您的 properties/attributes 添加到用户配置文件中。希望对您有所帮助。
我正在使用 play framework 2.4 构建一个网站,其中用户将是最重要的实体。
我想使用具有 username/password 或 email/password 注册策略的 securesocial (3.0-M4) 模块,但我找不到扩展 BasicProfile 的最佳方法 class添加比默认 class 中已实现的属性更多的属性(例如:名字、姓氏、电子邮件等...)
我想添加如下属性: - 性别 - 出生日期 - ...
如果有人知道继续进行的最佳方式,我将非常高兴! :D
我浏览了整个文档一千遍,几乎浏览了整个网络。我想我的下一步是上吊 :P
据我了解,BasicProfile 表示所有 Auth 提供程序共有的最少信息。虽然这可能不是 100% 正确,但我认为这是 BasicProfile
背后的假设。
有 currently an issue open on GitHub 来改变这个,还有一个 PR 据说可以修复它(老实说,我从来没有尝试过)。
在我看来,您目前最好的选择是使用 decorator/adapter/wrapper 模式并编写在您的用户和 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;
}
.....
.....
}
通过上述模型和方法来回转换,您可以轻松地将您的 properties/attributes 添加到用户配置文件中。希望对您有所帮助。