Обработка перенаправления на определенную страницу

Я использую Deadbolt для авторизации. Мне нужно перенаправить пользователя, если он присутствует (subjectPresent). Например, этот контроллер отображает страницу регистрации:

public static Result signup() {
     return ok(signup.render())
 }

Но если пользователь уже присутствует (тогда он уже зарегистрирован), вышеуказанный контроллер должен перенаправить его на страницу своего профиля: return ok(profilePage.render())

Как можно сделать это с аннотацией?

1 ответ

Решение

Deadbolt на самом деле не для этого вида условного переключения, но вы можете взломать его следующим образом:

  1. Создайте еще один DeadboltHandler, называемый что-то вроде SubjectPresentHandler
  2. Реализуйте метод SubjectPresentHandler#onAuthFailure для перенаправления на страницу профиля
  3. Аннотируйте свой метод регистрации с помощью

    @SubjectNotPresent(Обработчик =SubjectPresentHandler.class)

Это вызывает ошибку авторизации, если пользователь присутствует. Затем он вызовет SubjectPresentHandler#onAuthFailure для получения результата.

Однако лично я хотел бы рассмотреть возможность добавления простого теста в метод регистрации в соответствии с

public static Result signup() {
    Result result;
    User user = // however you normally get your user
    if (user == null) {
        result = ok(signup.render())
    } else {
        result = redirect(routes.<your profile view method>);
    }
    return result;
}
Другие вопросы по тегам