У меня есть клиент javascript и серверная часть Laravel, и я использую Oauth.IO для социальной аутентификации. Я выполнил шаги, указанные здесь: http://docs.oauth.io/#authorizing-the-user-with-both-front-end-and-back-end-sdks
Я успешно получил токен по телефону generateStateToken()
метод, но когда я отправляю это $this->oauth->auth()
метод, который я получаю Недопустимый формат ошибка. Подскажите, пожалуйста, что означает эта ошибка и что я делаю неправильно.
Сторона клиента
var selectedAuth = 'facebook';
$.post('http://localhost/auth/v1/social', {provider: selectedAuth, get_state_token: 1}, function(data){
OAuth.popup(selectedAuth)
.done(function(result) {
console.log(result);
$.post('http://localhost/auth/v1/social', {provider: selectedAuth, code: data.token, access_token: result.access_token}, function(data){
console.log(data);
}, 'json');
})
.fail(function (err) {
//handle error with err
});
}, 'json');
Сторона сервера
// code to get the state token in a different method
$token = $this->oauth->generateStateToken();
return response()->json(['status' => 'success', 'token' => $token]);
— снип —
// code to get access token from state token in another method
$provider = 'facebook';
$request_object = $this->oauth->auth($provider, array(
'code' => $code
));
$credentials = $request_object->getCredentials();
Я подтвердил, что $code
действительно имеет точный токен состояния, который я получил на 1-м шаге.
Значение $credentials
как следует:
{"status":"error","data":{"code":"Invalid format"},"refreshed":false}
Пожалуйста, помогите мне здесь. Эта ошибка возникает как для Facebook, так и для Twitter, а также. Дайте мне знать, если вам нужно больше деталей.
Мне очень жаль, что я разместил этот вопрос. Я пропустил шаг в документации. Я оставляю этот вопрос здесь как ссылку для других на случай, если кто-то еще столкнется с той же проблемой.
Ошибка была в моем коде JavaScript. Во время звонка Oauth.popup()
Мне нужно было передать маркер состояния и получить код, который затем должен был быть передан на сервер. Я отправлял на сервер токен состояния вместо кода.
Правильный код будет таким:
var selectedAuth = 'facebook';
$.post('http://localhost/auth/v1/social', {provider: selectedAuth, get_state_token: 1}, function(data){
OAuth.popup(selectedAuth, {
state: data.token
})
.done(function(result) {
console.log(result);
$.post('http://localhost/auth/v1/social', {provider: selectedAuth, code: result.code, access_token: result.access_token}, function(data){
console.log(data);
}, 'json');
})
.fail(function (err) {
//handle error with err
});
}, 'json');
Других решений пока нет …