hutong236
发表于 2013-08-31 23:26
本帖最后由 hutong236 于 2013-08-31 23:28 编辑
:lol 扶凯,又麻烦你了,
我看Mojocast #3: Authentication, Helpers, and Plugins 视频,里有段代码测试和上面结果不一样.
按视频上输入的username为"aaa"或是password="bbb",都能跳到"$self->render(text => 'Welcome to Moncorp1'); ",但是我测试结果
输入的username不为"aaa"或不是password="bbb",都能跳到"$self->render(text => 'Welcome to Moncorp1');",怎么都不显示"$self->render(text => 'denied')",不知道是我那里搞错了?
谢谢!#!/usr/bin/perl -w.
use Mojolicious::Lite;
get '/login' => sub {shift->render('login')};
post '/momcorp' => sub {
my $self = shift;
print $self->param('password'),"\n";
$self->render(text => 'denied') if
$self->param('username') ne 'aaa' or
$self->param('password') ne 'bbb';
$self->render(text => 'Welcome to Moncorp1');
};
app->start;
@@ login.html.ep
<h1>Login</h1>
<form method="post" action="/momcorp">
Username:<input type="text" name="username" />
Password:<input type="text" name="password" />
<input type="submit" value="Login" />
</form>
gzadsluser
发表于 2013-09-02 01:12
回复 61# hutong236
两个render肯定是显示最后一个啦,验证失败要立即return,否则最后一句还是会执行。
hutong236
发表于 2013-09-02 15:43
gzadsluser 发表于 2013-09-02 01:12 static/image/common/back.gif
回复 61# hutong236
但是我看人家视频上都没有加return,测试也过啊.
只是后面加了以下代码,换成条件and就行了.
under sub {
my $self = shift;
return 1 if $self->params_auth( username => password => sub{
return 1 if "@_" eq 'aaa bbb'
});
$self->render(text => 'denied');
return;
};
post '/momcorp' => sub {
my $self = shift;
$self->render(text => 'denied') if $self->params_auth( username => password => sub{
return 1 if "@_" eq 'aaa bbb'
});
$self->render(text => 'Welcome to Moncorp1');
};
iakuf
发表于 2013-09-03 06:03
回复 63# hutong236
gzadsluser 讲得对,两个 render 肯定是显示最后一个
snriyt
发表于 2013-09-08 15:40
回复 1# iakuf
假设如下语句:
$res = db->query(xxx);
$self->render(msg=>$res);
模板里面
%= $msg
会是乱码。但是如果加上
% use Encode;
%= decode_utf8($msg)
则输出正常。
推测应当是mojo在render的时候对传入的数据进行了encode。如果不让它自动encode?
iakuf
发表于 2013-09-08 21:52
本帖最后由 iakuf 于 2013-09-08 21:57 编辑
回复 65# snriyt
数据库连接的时候设置了 mysql_enable_utf8 没?
另外,在写程序的时候,可以直接在程序的 Controller 中前面加上use utf8;有关语言的东西,在 Mojo 的 Wiki 中提到过.链接如下
How to work with UTF-8?
snriyt
发表于 2013-09-08 22:37
回复 66# iakuf
3qs,我试试
iakuf
发表于 2013-09-09 18:41
回复 67# snriyt
有结果记得回复,也好告诉大家能不能解决.
snriyt
发表于 2013-09-10 12:49
好吧,的确能解决,不过必须my $dbh = DBI->connect($data_source, undef, undef, {sqlite_unicode => 1});下面就行不通的my $dbh = DBI->connect($data_source);
$dbh-> {sqlite_unicode} =1;
iakuf
发表于 2013-09-10 13:22
回复 69# snriyt
这是原生的 DBI 模块的限制.在讲,他本来就没打算让你可以不断的修改字符集.