5

フックを使用してサインアップ ページをカスタマイズしました。

Liferayユーザーが初めてログインしたときにデフォルトのセキュリティの質問が設定されているサインアップページにセキュリティの質問を追加したいと思います。

では、初回ログイン時の代わりにサインアップ ページにセキュリティの質問を追加するにはどうすればよいですか?

4

1 に答える 1

1

最初に、ページをカスタマイズして、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...

于 2013-04-30T08:41:41.670 に答える