CakePHP логин помощь - PullRequest
       3

CakePHP логин помощь

0 голосов
/ 06 мая 2011

Я создал очень простую систему входа в систему, используя CakePHP, но теперь у меня есть несколько вопросов:

1.) Как отобразить сообщение setFlash при входе пользователя в систему? Я попытался добавить один в метод входа в систему, но тогда он просто будет показывать его все время при посещении страницы входа в систему и не будет отображаться при успешном входе в систему? Но работает ли метод выхода из системы?

2.) Когда пользователи входят в систему, они ВСЕГДА попадают на домашнюю страницу из-за loginRedirect, но как мне отправить их на страницу, на которой они находятся в данный момент? Поскольку форма входа в систему находится в заголовке общедоступных страниц, поэтому при входе в систему я хочу, чтобы их отправили обратно на ту же страницу.

Вот код, который я сейчас использую в моем app_controller.php

var $components = array('Auth','Session');

function beforeFilter()
{
    $this->Auth->authorize = 'actions';
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');
    $this->Auth->logoutRedirect = array('controller' => 'home', 'action' => 'index');

}

а вот мой users_controller.php

/**
 * Log in
 */

function login ()
{

    $this->Session->setFlash('You\'re now logged in');

    $this->layout = 'login';

    $this->set('title_for_layout', 'Log in');

}

/**
 * Log out
 */

function logout ()
{

    $this->Session->setFlash('<div class="content"><h2>Pow</h2><p>Moo</p></div>');

    $this->redirect($this->Auth->logout());

}

и вот форма входа в систему, которая находится в заголовке каждой общедоступной страницы (обратите внимание, что у меня также есть отдельная страница входа в систему, которая содержит ту же форму):

<?php echo $this->Form->create('User', array('id' => 'loginform', 'type' => 'post',
        'url' => array('controller' => 'users', 'action' => 'login'))); ?>

<fieldset id="login">

    <ul class="clearfix">
        <li id="li-username">
            <?php echo $this->Form->input('username', array('label'=>false,'placeholder'=>'Username or email address')); ?>
        </li>
        <li id="li-password">
            <?php echo $this->Form->input('password', array('type'=>'password','label'=>false,'placeholder'=>'Password')); ?>
            <span id="iforgot"><?php echo $this->Html->link('?', 
            array('controller' => 'users', 'action' => 'forgotpassword'),  array('title' => 'Forgot your password?')); ?></span>
        </li>
        <li id="li-submit">
            <button type="submit" title="Log in">Log in &#9658;</button>
        </li>
    </ul>

</fieldset>

<?php echo $this->Form->end(); ?>

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Компонент входа в Cake никогда не бывает «простым» u_U

1) У меня была такая же проблема .. setFlash покажет сообщение на следующей странице ... и кажется, что сообщение теряется при некотором перенаправлении, которое делает компонент Auth.

Попробуйте метод @Ross, но если это не сработает, вы можете перезаписать AuthComponent и добавить setFlash () к методу входа в свой собственный AuthComponent .. примерно так:

class MyAuthComponent extends AuthComponent {
    function login($data = null,$public = false) {
        $this->Session->setFlash('WELCOME!');
        parent::login($data,$public);
    }
}

2) Я скопирую то, что Class API говорит о перенаправлении

loginAction mixed URL (определяется как строка или массив) к действию контроллера, который обрабатывает логины.

LoginRedirect mixed Обычно, если пользователь перенаправлен на страница $ loginAction, местоположение они были перенаправлены с хранятся в сеансе, чтобы они могли быть перенаправлены обратно после успешного авторизоваться. Если это значение сеанса не установить, пользователь будет перенаправлен на страница указана в $ loginRedirect.

В основном компонент Auth будет читать Session в поисках значения $_SESSION['Auth']['redirect'] и, если не найден, будет использовать атрибут LoginRedirect. Поскольку вы используете страницу входа в заголовке, легко обойти это, всегда добавляя $_SESSION['Auth']['redirect'] к текущей странице в appController. Вы можете использовать $this->here, чтобы получить текущую страницу .. может быть, есть другой способ ... но я не нашел ничего в документе торта

Удачи!

0 голосов
/ 06 мая 2011

Вот фрагмент одного из моих методов входа в систему -

function login() {
    // check it's a valid user
    $this->Session->setFlash('You have successfully logged in');
    $this->redirect(array('controller'=>'dashboard','action'=>'index'));
}

И мой контроллер панели управления использует шаблон с:

<?php echo $this->Session->flash(); ?> в нем.

Это соответствует (я полагаю) именно тому, о чем вы просите в #1

Что касается #2, вам может повезти, если использовать $this->redirect($this->referer());. См. Вернуть пользователя на предыдущую страницу после входа в систему? для получения дополнительной информации.

Если вы не хотите перенаправлять автоматически, вы можете использовать

$this->Auth->autoRedirect = false; в beforeFilter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...