FOSFacebookBundle:를 선택하기 전에 사용자 이름 등록
-
13-11-2019 - |
문제
치 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 매개 변수를 어떻게 보내는가?)하지만 다음과 같이 시도 할 수 있습니다.
- POST 매개 변수를 사용자 정의 컨트롤러 (사용자가 구현)
- 임시 저장소 사용자 이름 (사용자 세션 데이터가 아마도?)
- 트리거 인증 프로세스 (구현에 따라 다르지만 본질적으로 Facebook에서 인증 한 다음 Login_Check Path에 게시하는 것에 대해 이야기하고 있습니다)
- 인증 된 사용자에게 사용자 이름을 추가
이것은 일할 수 있지만, 나는 이렇게 한번도하지 않았습니다.
다른 팁
오래된 질문이지만,나는 유사한 문제입니다.내가 원하는 역할을 추가하려면을 때 사용자에게 그들이 등록에서 첫번째로 그들은 연결되어 있으로 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 사용자 이름 인 독특한 것입니다.