フックを使用してサインアップ ページをカスタマイズしました。
Liferay
ユーザーが初めてログインしたときにデフォルトのセキュリティの質問が設定されているサインアップページにセキュリティの質問を追加したいと思います。
では、初回ログイン時の代わりにサインアップ ページにセキュリティの質問を追加するにはどうすればよいですか?
フックを使用してサインアップ ページをカスタマイズしました。
Liferay
ユーザーが初めてログインしたときにデフォルトのセキュリティの質問が設定されているサインアップページにセキュリティの質問を追加したいと思います。
では、初回ログイン時の代わりにサインアップ ページにセキュリティの質問を追加するにはどうすればよいですか?
最初に、ページをカスタマイズして、create_account.jsp
通常は にあるのと同じ選択ボックスと入力update_reminder_query.jsp
を追加する必要があります。つまり、アカウントの作成中にパスワード リマインダーを入力するための UI を追加する必要があります。
その後、これらの値を新しいユーザー用に保存する必要があります。おそらくUserLocalService
実装をフックして、リマインダー クエリを更新するコードを追加できます。このようなことがうまくいくはずです:
public class UserLocalServiceImpl extends UserLocalServiceWrapper {
public UserLocalServiceImpl(UserLocalService userLocalService) {
super(userLocalService);
}
@Override
public User addUser(
long creatorUserId, long companyId, boolean autoPassword,
String password1, String password2, boolean autoScreenName,
String screenName, String emailAddress, long facebookId,
String openId, Locale locale, String firstName, String middleName,
String lastName, int prefixId, int suffixId, boolean male,
int birthdayMonth, int birthdayDay, int birthdayYear,
String jobTitle, long[] groupIds, long[] organizationIds,
long[] roleIds, long[] userGroupIds, boolean sendEmail,
ServiceContext serviceContext)
throws PortalException, SystemException {
// User
User user = super.addUser(
creatorUserId, companyId, autoPassword, password1, password2,
autoScreenName, screenName, emailAddress, facebookId, openId,
locale, firstName, middleName, lastName, prefixId, suffixId, male,
birthdayMonth, birthdayDay, birthdayYear, jobTitle, groupIds,
organizationIds, roleIds, userGroupIds, sendEmail, serviceContext);
// Reminder query
String question = ParamUtil.getString(
serviceContext, "reminderQueryQuestion");
String answer = ParamUtil.getString(
serviceContext, "reminderQueryAnswer");
if (Validator.isNotNull(question) || Validator.isNotNull(answer)) {
if (question.equals(UsersAdminUtil.CUSTOM_QUESTION)) {
question = ParamUtil.getString(
serviceContext, "reminderQueryCustomQuestion");
}
updateReminderQuery(user.getUserId(), question, answer);
}
return user;
}
}
Struts アクションをオーバーライドすることもできますがCreateAccount
、エラーが発生した場合 (たとえば、ユーザーがリマインダー クエリの回答を入力しない場合) にトランザクションを行うために、サービスでこのことを行う方が安全だと思います... しかし、念のために確認する必要があります。
また、可能性のある問題に対処するために、とにかくStrutsアクションをカスタマイズする必要があるでしょうUserReminderQueryException
...