1

ユーザーがログインすると、チェックボックスがオンになっていると、ユーザーの電子メールとパスワードを記憶するためにCookieを書き込むチェックボックスが表示されるように設定しようとしています。ユーザーコントローラーのログイン機能で次のようにします。

public function login() {
    if (!empty($this->data)) {
        if ($this->Auth->login()) {
            $userId = $this->Auth->user('id');
            if(!empty($this->data['User']['remember'])) {
                $user = $this->User->find('first', array('conditions'=>array('id'=>$userId), 'recursive'=>-1, 'fields'=>array('email', 'password')));
                $this->Cookie->write('User', $user['User']);
            }
... etc etc ...

Cakephp 1.x ではこれが機能していたので、AppController の beforefilter で単に Cookie を探して、次のようにログインしようとしました。

//try to auto login a users
    if($this->Auth->user() == null) {
        $user = $this->Cookie->read('User');
        if(!empty($user)) {
            $this->Auth->login($user);
        }
    }

しかし、それは今はうまくいかないようです。ログイン関数に何かを渡すと、私が読んだことから、trueが返されると思います。正しくログインするには、その Cookie の内容をログイン機能に POST する必要があります...

そうですか?どこかにフォームを作成し、多くのリダイレクトを介して情報を投稿するよりも簡単な方法はありますか?

また、Cookie 情報を $this->request->data 配列に追加してログインしようとしましたが、どちらも機能しませんでした :(

//try to auto login a users
if($this->Auth->user() == null) {
    $user = $this->Cookie->read('User');
        if(!empty($user)) {
            $this->request->data['User']['email'] = $user['email'];
            $this->request->data['User']['password'] = $user['password'];
            $this->Auth->login();
        }
    }

誰でも私を助けることができますか?これを行うには、もっと簡単な方法があるはずです。

4

1 に答える 1

1

これを試して..

このチェックボックスをログイン ctp ファイルに保持する

 <php echo $this->Form->checkbox('remember_me',array("id" => "id_remember_me",'name'=>'remember_me','label' => false)); ?>
 <span onclick="$('#id_remember_me').attr('checked',true);"><?php echo __('Remember my details')?></span>

その後、これを保持します

code in the controller where the $this->Auth->login() is..
     //Setting up the expiry time
     $year = time() + 31536000;
     if($this->request->data['remember_me']) {
     // Creating a cookie in the name of remember_me with the username for the time which was set
          setcookie('remember_me', $this->request->data['User']['username'], $year);
     }
     else if(!$this->request->data['remember_me']) {
         if(isset($_COOKIE['remember_me'])) {
              $past = time() - 100;
              setcookie('remember_me', 'gone', $past);
         }
     }
于 2013-04-06T07:17:26.897 に答える