我试图实现这一点并需要一些帮助。登录尝试失败后,我希望让用户获得反馈。如果登录尝试在服务器端失败,则在请求失败后在页面上显示错误消息。
// This is the Session Controller in UI
public class SessionsController extends Controller {
private final FormFactory formFactory;
private final ISessionService sessionsService;
private final IUserService userService;
@Inject
public SessionsController(FormFactory formFactory, ISessionService sessionsService, IUserService userService) {
this.formFactory = formFactory;
this.sessionsService = sessionsService;
this.userService = userService;
}
public Result createGet() {
CurrentUser currentUser = sessionsService.retrieveCurrentUserSession();
final Form<CreateViewModel> createViewModelForm = formFactory.form(CreateViewModel.class);
if (currentUser != null) {
return redirect(routes.HomeController.index());
}
return ok(create.render(createViewModelForm));
}
public Result createPost() {
final Form<CreateViewModel> createViewModelForm = formFactory.form(CreateViewModel.class);
CreateViewModel viewModel = createViewModelForm.bindFromRequest().get();
ServiceResponse<CurrentUser> response = sessionsService.createSession(viewModel.getEmail(), viewModel.getPassword(), request().remoteAddress());
if (response.hasErrors()) {
return ok(create.render(createViewModelForm));
}else{
IUser user = userService.retrieveById(response.getResponseObject().getId());
user.setLastLogin(dateUtils.getCurrentDateTime());
ServiceResponse<IUser> userResponse = userService.update(user, false);
if (userResponse.hasErrors()){
throw new RuntimeException();
}
DateTime start = new DateTime(user.getPasswordCreatedDate());
DateTime stop = new DateTime(DateTime.now());
int daysBetween = Days.daysBetween(start, stop).getDays();
if(daysBetween > 60){
user.setPasswordReset(true);
}
if (user.getPasswordReset() == true){
return editPasswordGet(user);
}
}
return redirect(routes.HomeController.index());
}
//这是UI视图会话
@(createForm: Form[femr.ui.models.sessions.CreateViewModel])
@import femr.ui.views.html.layouts.main
@import femr.ui.controllers.routes.SessionsController
@styles = {
<link rel="stylesheet" href="@routes.Assets.versioned("css/login.css")">
}
@main("Login", styles = styles) {
@helper.form(action = SessionsController.createPost(), 'class -> "form-signin") {
<div id="login">
<h1>Please sign in</h1>
<input type="text" name="email" placeholder="Email" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Log in" />
<img src="@routes.Assets.versioned("img/logo_color_sm.png")" />
</div>
}
}
@(createForm: Form[femr.ui.models.sessions.CreateViewModel])
@import femr.ui.views.html.layouts.main
@import femr.ui.controllers.routes.SessionsController
@styles = {
<link rel="stylesheet" href="@routes.Assets.versioned("css/login.css")">
}
@main("Login", styles = styles) {
@helper.form(action = SessionsController.createPost(), 'class -> "form-signin") {
<div id="login">
<h1>Please sign in</h1>
<input type="text" name="email" placeholder="Email" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Log in" />
<img src="@routes.Assets.versioned("img/logo_color_sm.png")" />
</div>
}
}
答案 0 :(得分:0)
一种简单的技术是将消息添加到响应对象,并在登录失败时将视图指定为“Home / login”。添加这些消息应与您在响应中设置数据的方式非常相似。在UI屏幕上,在用户名,密码部分之上有一个动态div,可以检索响应消息(如果有的话)。