3

基本的なログイン ページの作成 - 機能していましたが、データベースを変更したため、リダイレクトが機能しなくなりました。

ログインしようとすると、サイトがデータベースに対してチェックしているSQLコードをチェックした後、ユーザー名/パスワードが間違っていると言ってサイトが戻ってきます-正しい情報を送信していますが、ログインを許可していません.

ユーザーがサイトにログインしたときに、ebox (コントローラー) のホーム (ビュー) にリダイレクトされるようにします。

これは、ログインするためのコントローラーのコードです

    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->Auth->login()){
            $username = $this->request->data['User']['username'];
            if (0 === $this->User->find('count',array('conditions'=>array('activated'=>true,'username'=> $username)))){
                $this->Session->setFlash('Sorry, your account is not validated yet.');
                $this->redirect($this->referer());
                } 
            else{
                $this->Auth->user('id');
                $this->redirect( array('controller' => 'Eboxs','action' => 'home'));
                }
        }  

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


}

ここにビューのコードがあります

<?php    
         echo $this->Form->create('User', array('action' => 'login'));
         echo $this->Form->input('username');
         echo $this->Form->input('password');
         echo $this->Form->end('Login');

     ?> 
4

3 に答える 3

1
I think try this

//app controller
class AppController extends Controller {

    public $components = array(
        'Acl',
        'Auth' => array(
            'authorize' => array(
                'Actions' => array('actionPath' => 'controllers')
            )
        ),
        'Session'
    );


    public function beforeFilter() {

     //Configure AuthComponent
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
     $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
     $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
    }

}


//login action view

echo $this->Form->inputs(array(
    'legend' => __('Login'),
    'username',
    'password'
));


//this is controller code


 if ($this->request->is('post')) {
      if ($this->Auth->login()) {
   $this->redirect($this->Auth->redirect());
      } else {
   $this->Session->setFlash('Your username or password was incorrect.');
      }
  }
于 2012-07-25T11:01:42.907 に答える
0

データベースを変更する場合、またはモデル キャッシュを削除する場合は、core.php ファイルでデバッグ モードを '2' に設定します。後で実稼働サイトでデバッグ モードを 0 に変更できます。また、新しいデータベースの users テーブルに有効なユーザー名とパスワードがあることも確認してください。パスワード フィールドの構造も確認してください。varchar 255 である必要があります。

また、上記のロジックを次のように変更します -

if ($this->Auth->login()){
  $username = $this->request->data['User']['username'];
  if (0 === $this->User->find('count',array('conditions'=>array('activated'=>true,'username'=> $username)))) {

     $this->Session->setFlash('Sorry, your account is not validated yet.');
     $this->redirect($this->referer());
   } else {
    $this->Auth->user('id');
    $this->redirect( array('controller' => 'Eboxs','action' => 'home'));
   }   
} 

使用する代わりにビューファイルで

echo $this->Form->create('User', array('action' => 'login'));

使ってみて -

echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'login')));
于 2012-07-25T06:26:05.390 に答える
0

コードが機能しない理由を確認できる次のような状況があります。

  1. ユーザーモデルで beforeFilter() メソッドを使用しましたか?

    はいの場合は、それが何を言っているのかを確認してください。

  2. UsersController の beforeFilter の Auth->allow() メソッドに「login」メソッドを配置します。

    function beforeFilter(){
        $this->Auth->allow('login');
    }
    
  3. データベースに保存されている関連付けられたハッシュ化されたパスワードが、対応するユーザーに入力しているパスワードと同じかどうかを確認してください。次の構文を使用して、Auth ハッシュ化パスワードを確認できます。

    pr(AuthComponent::password('USER PASSWORD HERE'));
    
  4. 次の構文を使用してフォームを作成できます。

    echo $this->Form->create('User', array('url' => $this->request->params));
    

それでもうまくいかない場合は、お気軽にお問い合わせください。

于 2012-07-25T09:52:35.220 に答える