1

自動ログインコンポーネントで CakePHP 2x を使用しています。問題は、私はものを書くことができますが、それを実装して読み取りと承認を行う方法がわからないことです。ユーザーがページに到着したとき、ブラウザにはまだ Cookie がありますが、どのように認証すればよいですか?

私のログインスクリプト:

public function login() {
        if ($this->Auth->user('id')) {
            $this->redirect(array('action' => 'dashboard'));
        }
        if($this->request->data['User']['auto_login']):
        $this->AutoLogin->write($this->request->data['User']['username'],
                $this->request->data['User']['password']);
        endif;

        if ($this->request->is('post')) {
            if ($this->Auth->login( )) {
                //$this->redirect(array('controller' => 'users', 'action' => 'dashboard'));
                return $this->redirect($this->Auth->redirect( ));
            }
            else 
            {
                $this->Session->setFlash(__('Username or Password is incorrect'), 'default', array( ), 'auth');
            }
        }
4

1 に答える 1

1

これは次のようになります。

public function login()
{       
    if ($this->request->is('post'))
    {
        if ($this->Auth->login())
        {               
            if ($this->request->data['User']['persist'] == '1')
            {
                $cookie = array();
                $cookie['username'] = $this->data['User']['USER_LOGINNAME'];
                $cookie['password'] = $this->data['User']['USER_PASSWORD'];
                $this->Cookie->write('Auth.User', $cookie, true, '+4 weeks');
            }
            $this->redirect($this->Auth->redirect());
        }
        else
        {
            $this->Session->setFlash('Your username or password was incorrect.', 'default/flash-error');
        }
    }
    else
    {
        $user = $this->Auth->user();
        if (empty($user))
        {
            $cookie = $this->Cookie->read('Auth.User');                             
            if (!is_null($cookie)) 
            {
                $user = $this->User->find('first', array('conditions' => array('USER_LOGINNAME' => $cookie['username'], 'USER_PASSWORD' => AuthComponent::password($cookie['password']))));
                if ($this->Auth->login($user['User'])) 
                {
                    $this->Session->delete('Message.auth');
                    $this->redirect($this->Auth->redirect());
                }
                else 
                { 
                    $this->Cookie->delete('Auth.User');
                }
            }
        }
        else
        {
            $this->redirect($this->Auth->redirect());
        }
    }
}

これにより、同じタスクを達成する方法のアイデアが得られますが、DB 構造に従ってフォーム フィールドを使用しました。

DB 構造に従ってフォーム フィールドを変更してください。

于 2012-09-06T10:12:51.683 に答える