страница после входа в playframework - PullRequest
5 голосов
/ 05 сентября 2011

В моей игре!приложение, я закодировал контроллеры. Безопасность как

class Security extends controllers.Secure.Security {
...
   static void onDisconnected() {       
       Application.index();
   }
   static void onAuthenticated() {
      User user = User.find("byEmail",Security.connected()).first();
      if(user.isAdmin()) {
         Admin.index();
      }else {
          System.out.println("onAuthenticated()::user not admin");
   }
}

Я установил маршруты как

GET     /admin/?              Admin.index
*       /admin                module:crud
GET     /                    Application.index

Когда я нахожусь на странице, скажите pageX и нажмите на ссылку для входа,Появляется форма входа в систему, и я могу войти в систему. Если я вхожу как администратор, он ведет меня к Admin.index () и, таким образом, к представлению Admin / index.html. Так что все хорошо

Но когда яЯ нахожусь на странице X и нажимаю на ссылку входа в систему. Я ожидаю, что вернусь к странице X.Instead, вызывается метод Application.index (), и меня перенаправляют в Application.index.html. Это ожидаемое поведение?Что мне нужно сделать, чтобы попасть на страницу X после входа в систему?

обновление:

Я попытался сохранить URL-адрес во флэш-памяти с помощью @Before в контроллере безопасности

class Security extends controllers.Secure.Security {
   @Before
   static void storeCurrentUrl() {
      System.out.println("storeCurrentUrl()");
      flash.put("url", "GET".equals(request.method) ? request.url : "/");
   }
   static boolean authenticate(String username, String password) {
   ...
   }

   static void onAuthenticated() {
      ...
      String url = flash.get("url");
      System.out.println("url="+url);
      if(!user.isAdmin()) {
         if(url!=null) {
        System.out.println("url not null");
        redirect(url);
     }else {
       System.out.println("url null  ..go to /");
       redirect("/");
    }
      }
   }

Когда я вхожу в систему, я получаю эти выходные данные терминала

url=null
url null  ..go to /
index()

Я поместил ссылки для входа / выхода из системы в шаблон main.html, который наследуется всеми другими страницами

<div id="main">
    <div class="auth">
     <a href="@{Admin.index()}">Go to Admin Area</a><br/><br/>
     <a href="@{Secure.login()}">Login</a><br/><br/>
     <a href="@{Secure.logout()}">Log out</a>
</div>

Ответы [ 3 ]

7 голосов
/ 05 сентября 2011

В вашем контроллере, перед вызовом 'login ()' поместите 'url' во флеш-память как:

flash.put("url", "GET".equals(request.method) ? request.url : "/");

После успешного входа в систему получите url и перенаправьте.

String url = flash.get("url");
redirect(url); //you may redirect to "/" if url is null
0 голосов
/ 05 сентября 2011

При воспроизведении уже выполняется перенаправление на исходный URL-адрес, когда вы пытаетесь получить доступ к защищенной странице, пока не вошли в систему.

Если вы хотите использовать это повторно, вы можете поместить свой URL-адрес в область видимости флэш-памяти в методе "onAuthenticated".,В исходном коде воспроизводите вызов «redirectToOriginalURL» сразу после этого, основываясь на значении значения «url».

static void onAuthenticated() {
    flash.put("url", "GET".equals(request.method) ? request.url : "/");
}
0 голосов
/ 05 сентября 2011

Это будет ожидаемое поведение, поскольку именно так настроена ваша маршрутизация.Нажмите на логин и получите перенаправление в Application.index или Admin.index, если вы являетесь администратором.

Если вы хотите получить страницу, по которой вы щелкнули ссылку для входа, вы можете добавить текущее действие в ссылку для входа и после проверки подлинности перенаправить на это действие.

т.е.ссылка для входа в систему: GET /login?action=Application.something -> позволяет перейти на страницу входа и сохранить действие как скрытое поле в форме входа.Когда вы аутентифицируете пользователя, вы делаете действие.

...