1

このメソッドを使用して FOSUserBundle と FOSFacebookBundle をインストールしました: Symfony2 で FOSFacebookBundle を使用して Facebook 経由でサインインするための別の URL を作成する方法。実際、セキュリティのプロセス全体をよく理解していませんでしたが、現在は正常に機能しています。

誰かが Facebook サインアップを使用している場合、登録する前に (Facebook ID をユーザー名として使用するのではなく) ユーザー名を選択できるようにしたいと思います... 私が行うことは、Facebook ログイン ルートに POST パラメーターを送信することですが、できません。 t 登録が処理されているコントローラを見つけます。

ベストプラクティスは何ですか? ユーザー名 (POST パラメータ) をどこで取得して設定すればよいですか?

security.yml の構成は次のとおりです。

firewalls:

public:
  pattern: ^/

  fos_facebook:
    app_url: "http://www.appName.com"
    server_url: "http://local.appName.com/app_dev.php/"
    login_path: /login
    check_path: /login_check/facebook
    provider: appName.facebook.provider

  form_login:
    login_path: /login
    check_path: /login_check/form
    provider: fos_userbundle
    csrf_provider: form.csrf_provider  

そして、これが私がfacebookでサインアップするために使用するルーティングです:

_security_check_facebook:
    pattern: /login_check/facebook
4

3 に答える 3

2

認証を処理するコントローラーはありません。これまでの認証方法は、check_pathでトリガーするリスナーを追加し、トリックを実行します。

認証プロセスは、カスタム ユーザー データを追加する責任を負うべきではありません。FOSFacebookBundle のドキュメントに従った場合、ユーザーをデータベースに保存するカスタム ユーザー プロバイダーが必要です。これは少し混乱するかもしれませんが、これは登録手順ではなく、認証手順です。ユーザー名の追加は、プロフィールの編集とよく似ています。

あなたを助けるために、私はあなたの実装を見る必要があります(どのようにポストパラメータを送信しますか?)が、次のようなことを試すことができます:

  1. 投稿パラメーターをカスタムコントローラーに送信します(あなたが実装しました)
  2. 一時ストアのユーザー名 (おそらくユーザー セッション データ?)
  3. 認証プロセスをトリガーします(これは実装によって異なりますが、基本的にはFacebookで認証してからlogin_checkパスに投稿することについて話しています)
  4. 認証されたユーザーにユーザー名を追加します

これはうまくいくかもしれませんが、私はこのようなことをしたことがありません。

于 2012-03-15T21:16:36.403 に答える
1

古い質問ですが、私は同様の問題に取り組んでいました。ユーザーが Facebook に初めて接続したときに登録されたときに、ユーザーに役割を追加したいと考えていました。

FOSFacebookBundle ドキュメンテーションのこれらの手順に従うと、Facebook に接続されたユーザーの「登録」を利用できますFacebookProvider。クラスを見てください。

loadUserByUsernameメソッドには、次の部分があります。

if (!empty($fbdata)) {
    if (empty($user)) {
        $user = $this->userManager->createUser();
        $user->setEnabled(true);
        $user->setPassword('');
    }

    $user->setFBData($fbdata);
    ...

ifの後setPasswordに、ユーザーのロールを追加した場所です。

setFBDataユーザー名を選択するという最初の問題については... ?への呼び出しに注意してください。

User エンティティでは、メソッドは次のようになります。

public function setFBData($fbdata)
{
    if (isset($fbdata['id'])) {
        $this->setFacebookId($fbdata['id']);
        $this->addRole('ROLE_FACEBOOK');
    }
    if (isset($fbdata['first_name'])) {
        $this->setFirstname($fbdata['first_name']);
    }
    if (isset($fbdata['last_name'])) {
        $this->setLastname($fbdata['last_name']);
    }
    if (isset($fbdata['email'])) {
        $this->setEmail($fbdata['email']);
    }
}

次のようになりsetFacebookId()ます。

public function setFacebookId($facebookId)
{
    $this->facebookId = $facebookId;
    $this->setUsername($facebookId);
}

つまり、ユーザー名の由来です。これは、選択したユーザー名を に差し込んで、$facebookId.

于 2013-10-08T11:28:41.227 に答える
1

私はこれのために別の方法をとった。GraphAPI を使用しました。

public function setFacebookId($facebookId)
{
    $this->facebookId = $facebookId;
    $username = json_decode(file_get_contents('http://graph.facebook.com/'.$this->facebookId))->username;
    $this->setUsername($username);
}

一意の Facebook ユーザー名を使用します。

于 2014-05-16T00:14:28.967 に答える