0

単純なログインページを作成しようとしています。そのページで検証を行い、ユーザーがログインをクリックしたときに、アクティブ化されたユーザーデータベースが1に設定されていることをサイトがチェックし、そうでない場合はログインできないようにします。私はまだcakephpに慣れておらず、すぐに理解しようとしているので、これが単純な初心者の質問である場合は申し訳ありません。

これが私のユーザーモデルでの検証です

public $checkActive = array(
    'activated'=>array(
            'rule'=>array('equalTo', '0'),
            'message'=>'The account must be activated, please check your email.'
        ));

これが私のusersControllerのログイン機能です

 public function login() {

    $this->set('title_for_layout', 'Individual Registration');
    $this->set('stylesheet_used', 'style');
    $this->set('image_used', 'eBOXLogo.jpg');


    if ($this->request->is('post')){
    if ($this->request->data['User']['password'] == 'qazwsx'){
    if ($this->Auth->login()){
     if (0 === $this->User->find('count',array('conditions'=>array('enabled'=>1,'login'=> $username)))) {
         $this->Session->setFlash('Sorry, your account is not validated yet.');
    }

        $this->Auth->user('id');
        $this->redirect($this->Auth->redirect('eboxs/home')); 
        }   
    } 
    else {

        $this->Session->setFlash('Username or password is incorrect');
    }
    }else{
    $this->Session->setFlash('Welcome, please login');
    }


}

これがusersControllerのbeforeLogin関数です

 public function beforeLogin(){

    if(isset($this->data['User']['password'])){
        $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
        }
        return true;
    }

アプリコントローラー

class AppController extends Controller {

    public $components = array(
        'DebugKit.Toolbar',
        'Session', 
        'Auth'=>array(
            'loginRedirect'=>array('controller'=>'users', 'action'=>'login'),
            'logoutRedirect'=>array('controller'=>'users', 'action'=>'login'),
            'authError'=>"You can't access this page",
            'authorize'=>array('Controller')
        )
    );

    public function isAuthorized($user){
        return true;
    }

    public function beforeFilter(){
    $this->Auth->allow('index','view');
    $this->set('logged_in', $this->Auth->loggedIn());
    $this->set('current_user',$this->Auth->user());

    }

コントローラーに検証への呼び出しがないことを認識しましたが、ユーザー名などの他の検証では一意であるため、呼び出す必要はありませんでした。

つまり、現時点では誰でも私のページにログインできるようにしようとしています。これにより、usersテーブルのアクティブ化されたフィールドに1が含まれているユーザーだけがログインできるようになります。

4

2 に答える 2

1

認証設定にオプションを追加しscopeます。

'Auth'=>array(
        'loginRedirect'=>array('controller'=>'users', 'action'=>'login'),
        'logoutRedirect'=>array('controller'=>'users', 'action'=>'login'),
        'authError'=>"You can't access this page",
        'authorize'=>array('Controller'),
        'scope' => array('User.activated' => 1)
    )

これにより、ユーザーが を持っていない場合、ユーザーはログインできなくなりますUser.activated = 1

また、認証設定を調べて、CakePHP 2.0 のマニュアルページを読み直してください。設定は 1.3 のように見えます。自分でパスワードを確認する必要はありませんbeforeLogin。また、このような簡単な設定のための方法は絶対に必要ありません。

于 2012-05-24T10:20:58.270 に答える
1

1 つのオプションは、次のようにログイン直後にアカウントの検証を確認することです。

<?php
if ($this->request->is('post')){
if ($this->request->data['User']['password'] == 'qazwsx'){
if ($this->Auth->login()) {

    // login ok, but check if activated
    $username = $this->request->data['User']['username'];
    if (0 === $this->User->find('count',array('conditions'=>array('activated'=>1,'username'=> $username)))) {
         $this->Session->setFlash('Sorry, your account is not validated yet.');
         $this->redirec($this->referer());
    }

    $this->Auth->user('id');
    $this->redirect($this->Auth->redirect('eboxs/home')); 
    }   
} 
于 2012-05-24T10:21:30.753 に答える