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 模块的限制.在讲,他本来就没打算让你可以不断的修改字符集.


   
页: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16
查看完整版本: Perl 的 Web 框架魔咒 (Mojolicious) 的中文网站-本帖回帖答疑