#playframework-2.0
#playframework-2.0
Вопрос:
Я пытаюсь получить имя пользователя сеанса с помощью request().username()
. В моем защищенном классе я переопределил getUsername()
, чтобы получить ключ электронной почты следующим образом:
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx){
return ctx.session().get("email");
}
@Override
public Result onUnauthorized(Context ctx){
return redirect(routes.Application.login());
}
При входе в систему я устанавливаю сеанс:
public static Result authenticate(){
Form<Login> loginForm = Form.form(Login.class).bindFromRequest();
if(loginForm.hasErrors()){
return badRequest(login.render(loginForm));
}
else{
session().clear();
session("email",loginForm.get().email);
return redirect(routes.Application.problems());
}
}
Я вижу, что это работает, потому что в моем браузере при входе в систему у меня есть это:
""37fbf73f635e5f6a37323396add131da2b7cbcf6-email=bob@example.com""
Но, когда я использую request().username() здесь, я получаю нулевое значение.
public static Result addProblem(){
create("new", "new", "new", "new", "new", request().username());
return redirect(routes.Application.problems());
}
Ответ №1:
Здесь значение request.username()
устанавливается в игре.
Итак, в контроллерах, которые вы хотите защитить, вы добавляете @Security.Authenticated(Security.class)
аннотацию? Вот так
В основном он использует action composition для установки имени пользователя в request()
перед каждым запросом на действия вашего контроллера. В вашем примере должно работать следующее:
@Security.Authenticated(Secured.class)
public class Problems extends Controller {
public static Result addProblem() {
create("new", "new", "new", "new", "new", request().username());
return redirect(routes.Application.problems());
}
...
}
Следуйте этому образцу проекта для получения дополнительной информации.
Ответ №2:
Итак, похоже, что вы можете использовать session().get("email")
вместо request().username()
хотя, я следил за документацией play, и здесь используется последнее:
public static Result add() {
Project newProject = Project.create(
"New project",
form().bindFromRequest().get("group"),
**request().username()**
);
return ok(item.render(newProject));
}