2

パスワードなしでユーザーにログインする方法を見つけようとしています。

その理由は、私のサイトに phpBB3 フォーラムがあり、ユーザーが既にそこにログインしているためです。そのため、私は現在、サイトを単なるフォーラム以上のものにする拡張機能を構築しています (CakePHP を使用)。ユーザーがフォーラムにアカウントを作成するときに、自動アカウント作成をCakePHPに添付できると思いました(もちろん、既存のユーザー向けの他のリンク)。したがって、ユーザーは、フォーラムに登録したのと同じユーザー名を持つ CakePHP アカウントを取得します。つまり、サイトの CakePHP 部分に登録する唯一の方法は、最初にフォーラムに登録することです。

ここで、ユーザーが引き続きフォーラムにログインできるように、phpBB3 ログインによってログ全体を処理したいと思います。次に、ログインに使用したユーザー名を使用して、サイトの CakePHP 部分にもログインするコードを添付します。フォーラムへ。

このようにして、フォーラムでのステータスによってユーザーを独自の ACL グループに配置することもできます。

それが私が求めていることであり、この方法でユーザーにログインする方法を知る必要があります。完全なコードを探しているわけではありません。パスワードをまったく持たずにCakePHPでユーザーにログインする方法を説明する答えを探しているだけです。

http://bakery.cakephp.org/articles/wilsonsheldon/2009/01/13/phpbb3-api-bridgeも見ましたが、探しているものとはまったく異なります...

4

3 に答える 3

7

私が思い出す限り、Auth はログインに 2 つの情報を必要とします。users テーブルのどのフィールドを auth with でチェックするかを変更できます。

$Auth->fields = array(
    'username' => 'username',
    'password' => 'password'
);

したがって、ニックネームと靴のサイズに従ってユーザーをログインできるようにしたい場合は、次のようにします。

$Auth->fields = array(
    'username' => 'nickname',
    'password' => 'shoesize'
);

重要:
AuthComponent は、データベースに保存されているパスワード値がプレーンテキストで保存されるのではなく、ハッシュされていることを想定しています。
(パスワードとSecurity.saltのsha1だと思います)

上記の例では、データベースにエントリが既に存在する場合、それぞれのエントリの靴のサイズ フィールドを靴のサイズのハッシュ バージョンで上書きする必要があります。

ハッシュ化されたパスワードを自分で生成するには、使用できます$Auth->password('A Password');


クイック アンド ダーティー

ユーザー テーブルのパスワード フィールドに次の戻り値を入力した場合: $Auth->password(null);

次に、以下を使用できます。

$Auth->login(
    array(
        'User'=>array(
            'username'=> USERNAME_FROM_PHPBB3,
            'password'=>null
        )
    )
);

迅速で汚れの少ない


新しいユーザーを作成するとき。パスワード フィールドをランダム入力の md5 ハッシュに設定します。

$this->authUser[$this->User->alias][$Auth->fields['password']] = $Auth->password(md5(rand().rand()));

phpBB3 のユーザー名を使用して、データベースの users テーブルから関連するレコードを取得します。

$this->authUser = $this->User->findByUsername( USERNAME_FROM_PHPBB3 );

クエリが成功した場合 ユーザーのログイン

if($this->authUser){
    if($Auth->login($this->authUser)){
        // Login Successful
    }
}

于 2011-04-03T22:22:35.160 に答える
0

Cakephpアプリから、ユーザーがphpbbフォーラムテーブルに存在するかどうかを確認できます。また、phpbbセッションを使用して、ユーザーがログインしているかどうかを確認できます。

于 2011-04-03T19:43:31.180 に答える
0

この関数はあなたの問題を解決します:

public function forceLogin($userName = NULL) {
    $this->_setDefaults();

    $this->User = ClassRegistry::init('User');
    $this->User->recursive = 0;
    $user = $this->User->findByUsername($userName);

    if (!empty($user['User'])) {
        $this->Session->renew();
        $user['User']['id'] = null;
        $user['User']['password'] = null;
        $this->Session->write(self::$sessionKey, $user['User']);
    }

    return $this->loggedIn();
}
于 2013-06-20T12:38:14.307 に答える