Dan*_* S. 2 flash controller mojolicious
我正在基于此处找到的身份验证系统构建一个身份验证系统:
https://github.com/alexanderBendo/Experiments/blob/master/exp0001/mojolicious-auth-session.pl
我遇到的问题是,如果用户输入了错误的用户名或密码,服务器将返回闪现消息,就像他们试图在未登录的情况下访问页面一样。它应该显示无效凭据消息。如果我第二次输入错误凭据,我会收到无效凭据消息。
这是相关的代码:
sub main {
my $self = shift;
if ( $self->is_user_authenticated ) {
$self->redirect_to('/main/cp');
} else {
$self->flash( message => 'You must log in to view this page' );
$self->render('login');
}
}
sub login {
my $self = shift;
my $user = $self->param('name') || q{};
my $pass = $self->param('pass') || q{};
if ( $self->authenticate( $user, $pass ) ) {
$self->redirect_to('/main/cp');
} else {
$self->flash( message => 'Invalid credentials!' );
$self->render('login');
return;
}
}
Run Code Online (Sandbox Code Playgroud)
模板:
% layout 'default';
% title 'Login';
<h1>Log In</h1>
<% if (my $message = flash 'message' ) { %>
<b><%= $message %></b><br>
<% } %>
<%= form_for login => (method => 'post') => begin %>
Name: <%= text_field 'name' %>
<br>
Password: <%= password_field 'pass' %>
<br>
<%= submit_button 'Login' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
谢谢。
Flash 需要用于保存会话中当前和下一个查询之间的数据。因此,flash数据不会立即放入会话中。
所以,你必须做redirect_to('login_page')除了render('login_page').
如果您不想进行重定向,则必须将数据保存到stash:
sub main {
my $self = shift;
if ( $self->is_user_authenticated ) {
$self->redirect_to('/main/cp');
} else {
$self->stash( message => 'You must log in to view this page' );
$self->render('login');
}
}
Run Code Online (Sandbox Code Playgroud)
模板:
% layout 'default';
% title 'Login';
<h1>Log In</h1>
<% if (my $message = stash 'message' ) { %>
<b><%= $message %></b><br>
<% } %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |