문제

치 FOSUserBundle 및 FOSFacebookBundle 이 방법을 사용: 어떻게 만드는 별도의 url 을 로그인을 통해 Facebook 를 사용하여 FOSFacebookBundle 에 Symfony2.실제로는 참으로 이해하지 못했어요 전체적인 보안 일 과정,그러나 있다는 것을 의미합니다..

누군가가 사용하여 facebook 가입,나는 가능성을 선택하려면 사용자 이름되기 전에 기록이(facebook id 를 같이 사용자 이름)...나는 무엇인가에게 보내는 포스트 매개 변수를 facebook 로그인 경로를 찾을 수 없습니다 컨트롤러 곳에 등록되고 처리됩니다.

것 최고의 연?어디서 검색하는 사용자 이름(포스트 매개 변수)그리고 그것을 만들었나?

여기에는 나의 구성에서는 보안이다.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
도움이 되었습니까?

해결책

컨트롤러 처리 인증이 없습니다. 끊임없는 인증 방법은 CHECK_PATH에서 트리거하고 트릭을 수행 할 수신기를 추가합니다.

인증 프로세스는 사용자 정의 사용자 데이터를 추가 할 책임이 없어야합니다. fosfacebookbundle 문서를 따르면 사용자가 데이터베이스에 사용자를 저장하는 사용자 정의 사용자 공급자가 있어야합니다. 이는 비트를 혼동 할 수 있지만 이는 등록 단계가 아닙니다. 인증 단계입니다. ...에 사용자 이름을 추가하는 것은 프로파일 편집과 훨씬 유사합니다.

구현을보아야합니다 (Post 매개 변수를 어떻게 보내는가?)하지만 다음과 같이 시도 할 수 있습니다.

  1. POST 매개 변수를 사용자 정의 컨트롤러 (사용자가 구현)
  2. 임시 저장소 사용자 이름 (사용자 세션 데이터가 아마도?)
  3. 트리거 인증 프로세스 (구현에 따라 다르지만 본질적으로 Facebook에서 인증 한 다음 Login_Check Path에 게시하는 것에 대해 이야기하고 있습니다)
  4. 인증 된 사용자에게 사용자 이름을 추가

    이것은 일할 수 있지만, 나는 이렇게 한번도하지 않았습니다.

다른 팁

오래된 질문이지만,나는 유사한 문제입니다.내가 원하는 역할을 추가하려면을 때 사용자에게 그들이 등록에서 첫번째로 그들은 연결되어 있으로 Facebook.

당신자 단계에서 FOSFacebookBundle 문서,당신은 활용할 수 있습니 Facebook 에 연결된 사용자의"등록",살펴보 FacebookProvider 클래스입니다.

loadUserByUsername 방법이 일부:

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

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

후에 setPassword 내면 어디에 추가 역할에 대한 나의 사용자.

에 대한 원래의 문제는 선택의 사용자 이름...통지는 전화 setFBData?

에서 사용자 entity 방법은 다음과 같습니다:

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.

나는 이것을 위해 또 다른 방법을했다. 나는 그래픽을 사용했다.

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

Facebook 사용자 이름 인 독특한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top