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

StackOverflow https://stackoverflow.com//questions/20044137

Вопрос

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

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

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

Как это сделать с помощью аннотации?

Это было полезно?

Решение

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

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

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

Это приводит к сбою авторизации, если пользователь присутствует.Затем это вызовет ObjectPresentHandler#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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top