Я пытаюсь реализовать Facebook Войти на сайт, который у меня есть. Веб-приложение построено на Laravel 4.2, и я использую SammyK/LaravelFacebookSdk
,
У меня есть следующий код для начального маршрута, который делает вход в систему:
Route::get('/facebook', function()
{
$login_link = Facebook::getLoginUrl(['email', 'user_status'], 'http://staging.breathe.yogijii.com/facebook/login/');
return Redirect::to($login_link);
});
Делать die
на $login_link
дает мне следующую строку:
Маршрут обратного вызова (facebook / логин):
// Endpoint that is redirected to after an authentication attempt
Route::get('/facebook/login', function()
{
/**
* Obtain an access token.
*/
try
{
$token = Facebook::getTokenFromRedirect();
if ( ! $token)
{
return Redirect::route('login')
->with('flash_notice', 'Unable to obtain access token');
}
}
catch (FacebookQueryBuilderException $e)
{
return Redirect::route('login')->with('flash_notice', $e->getPrevious()->getMessage());
}
if ( ! $token->isLongLived())
{
/**
* Extend the access token.
*/
try
{
$token = $token->extend();
}
catch (FacebookQueryBuilderException $e)
{
return Redirect::route('login')
->with('flash_notice', $e->getPrevious()->getMessage());
}
}
Facebook::setAccessToken($token);
/**
* Get basic info on the user from Facebook.
*/
try
{
$facebook_user = Facebook::object('me')->fields('id','name')->get();
}
catch (FacebookQueryBuilderException $e)
{
return Redirect::route('login')
->with('flash_notice', $e->getPrevious()->getMessage());
}
// Create the user if not exists or update existing
$user = User::createOrUpdateFacebookObject($facebook_user);
// Log the user into Laravel
Facebook::auth()->login($user);
return Redirect::route('login')
->with('flash_notice', 'Successfully logged in with Facebook');
});
Код перенаправляет на Facebook и, кажется, работает нормально. Однако, когда он возвращается к моему заявлению, я получаю ошибку:
Недопустимый redirect_uri: данный URL не разрешен конфигурацией приложения.
Я просмотрел все и потратил на это часы. Я не уверен, что мне не хватает чего-то маленького. Вот как выглядит конфигурация моего приложения:
Мои домены приложений совпадают идеально. Я также пытался создать приложение для холста, которое тоже не сработало. У кого-нибудь есть предложения?
Я попытался добавить мой редирект к действительным клятвам … Все еще не работает.
Я думаю, что решил свой собственный вопрос …
Я размышлял над комментарием @ CBroa выше о сообщении об ошибке неверного перенаправления, которое происходит после успешного перенаправления. Это заставило меня посмотреть, что происходит с сообщением об ошибке.
Чтобы получить сообщение об ошибке, я делаю:
$e->getPrevious()->getMessage()
Это заставило меня поверить, что «getPrevious» больше не актуально и, возможно, все работало, но я неправильно обращался к токену. Я получаю токен через:
Facebook::getTokenFromRedirect();
Я провел некоторое исследование и выяснил, что эта функция использует URL-адрес перенаправления. Он создавал URL перенаправления неправильно как localhost что-то. Это возвращало ноль, поскольку это не мой URL перенаправления.
Итак, читая futhur о том, как он создавал этот URL, я нашел в моем app / config / app.php:
return array(
....
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => 'http://localhost:8888',
.....
);
Вот где ошибка была … Я думаю, я никогда не обновлял ее после первоначальной установки Laravel. После исправления этого к правильному URL я начал получать токен.
Спасибо всем за помощь 🙂
Попробуйте домен приложения должен быть просто yogijii.com, а URL сайта должен быть просто yogijii.com
Вы устанавливаете свои действительные URI перенаправления OAuth как http://staging.breathe.yogijii.com/facebook/login/
поэтому я хотел бы верить, что вы установили URL своего сайта как http://staging.breathe.yogijii.com/facebook/login/
URL вашего веб-сайта должен быть местом, где завершается транзакция входа в систему, для большинства целей и целей ваш URL перенаправления.
Попробуйте сами, изменив URL перенаправления с
в