Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Редирект в Dancer2 
:(
    Опции темы
slavenk
Дата 18.12.2013, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Здравствуйте!
Имеется вот такое автономное приложение на Dancer2:

app.pl
Код

#!/usr/bin/env perl
use Dancer2;

use Data::Section::Simple qw/get_data_section/;
use DBI;
use utf8;

my $index = get_data_section('index.html');

# Settings
#---------------------
set appname    => "LovelyIO::And::AJAX::In::Dancer2";
set charset    => "UTF-8";
set serializer => 'JSON';
#---------------------

get '/' => sub { 'hello' };

any ['get', 'post'] => '/login' => sub {
  if (request->method() eq 'POST') {
    my $username = param 'username';
    my $password = param 'password';

    my $dbfile = 'mydb.db';
    my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","") or die $DBI::errstr;

    my $statement = qq{SELECT id FROM users WHERE username=? and password=?};

    my $sth = $dbh->prepare($statement) or die $dbh->errstr;
    my $rv = $sth->execute($username, $password) or die $sth->errstr;

    my ($userID) = $sth->fetchrow_array;

    if ($userID) {
      redirect '/';
    } else {
      if (request->is_ajax) {
        response->content_type('application/json');
        return {error => 'username or password is wrong'}; 
      }
    }
  }

  return $index;
};


dance;

__DATA__
@@ index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Very simple login using Perl, Lovely.IO, Ajax, JSON and SQLite</title>
    <link rel="stylesheet" type="text/css" media="screen, projection" href="http://www.blueprintcss.org/blueprint/screen.css" />
    <link rel="stylesheet" type="text/css" media="screen, projection" href="http://www.blueprintcss.org/blueprint/plugins/buttons/screen.css" />
    <link rel="stylesheet" type="text/css" media="print" href="http://www.blueprintcss.org/blueprint/print.css" />

    <!--[if IE]><link rel="stylesheet" type="text/css" media="screen, projection" href="http://www.blueprintcss.org/blueprint/ie.css"><![endif]-->
      <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>  

    <script type="text/javascript"> 
      $(document).ready(function(){
        $("#loginForm").submit(function() { // loginForm отправлена

          $.post('/login', { "username": $('#username').val(), "password": $('#password').val() }, function(data, textStatus, jqXHR){
            if (data.error) { // сценарий возвратил ошибку
              $('#loginResult').text("data.error: " + data.error).addClass("error");
            }
          });

          $('#loginResult').fadeIn();
          return false;
        });
      }); 
    </script>

    <style type="text/css">
      #loginContent { width: 350px; margin: 100px auto; }
      button[type] { margin: 0.5em 0; }
      dd {margin: 0; padding: 0; }
    </style>
  </head>
  <body>
    <div id="loginContent" class="container">
      <div id="loginResult" style="display:none;"></div>
      <form id="loginForm" name="loginForm" method="post" action="/login">
        <fieldset>
          <legend>Enter information</legend>

          <dl>
            <dt><label for="username">Username</label></dt>
              <dd><input type="text" id="username" name="username" class="text" size="20" /></dd>
            <dt><label for="password">Password</label></dt>
              <dd><input type="password" id="password" name="password" class="text" size="20" /></dd>
          </dl>

          <button type="submit" class="button positive"><img alt="ok" src="http://www.blueprintcss.org/blueprint/plugins/buttons/icons/tick.png" /> Login</button>
        </fieldset>
      </form>
    </div>
  </body>
</html>


Запускаю с помощью
$ plackup app.pl

Подскажите пожайлуста, как сделать редирект на роут '/', чтобы на выходе появилось 'hello':
get '/' => sub { 'hello' };

Сейчас никакого редиректа не происходит, хотя в лог пишется, что он прошел:

127.0.0.1 - - [18/Dec/2013:14:01:41 +0200] "GET /login HTTP/1.1" 200 4694 "-" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"
127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "POST /login HTTP/1.1" 302 0 "http://localhost:5000/login" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"
127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "GET / HTTP/1.1" 200 5 "http://localhost:5000/login" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"

Подскажите, в чем может быть проблема?
PM MAIL ICQ Skype   Вверх
Pfailed
Дата 18.12.2013, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Проблема не в Dancer. Редирект происходит, просто вы не видите эффекта. Т.к. запрос посылается через ajax, то и редирект делает ajax, а не ваша видимая страница.  
Если хотите, чтобы страница перенаправилась после успешной авторизации на /, то в ответ на успешный логин шлите json ответ оповещающий об успехе и устанавливайте cookies. В JavaScript смотрите на ответ, если успех то делайте location.href = "/"


--------------------
PM MAIL   Вверх
slavenk
Дата 19.12.2013, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Спасибо большое, разобрался! Написал следующим образом:

Код

$.post('/login', { "username": $('#username').val(), "password": $('#password').val() }, function(data, textStatus, jqXHR){
  data.error 
    ? $('#loginResult').text("data.error: " + data.error).addClass("error") 
     : $(window).attr('location', '/');
});


PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.