Я пытаюсь authentiate через OAuth Google, но у меня возникают проблемы, устанавливающих связь с их APIinvalid_grant Google OAuth
Мой код клиента:
'click #addChannel': function (event) {
event.preventDefault();
var userId = Meteor.userId();
var options = {
requestPermissions: [
'https://www.googleapis.com/auth/youtube',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/youtube.force-ssl',
'https://www.googleapis.com/auth/youtube.readonly',
'https://www.googleapis.com/auth/youtube.upload',
'https://www.googleapis.com/auth/youtubepartner',
'https://www.googleapis.com/auth/youtubepartner-channel-audit',
],
requestOfflineToken: true
};
Google.requestCredential(options, function(token) {
Meteor.call('userAddOauthCredentials', userId, token, function(error, result) {
if (error) {
throw error;
}
console.log(result);
});
});
Мой код сервера:
userAddOauthCredentials: function(userId, token) {
check(userId, String);
check(token, String);
var config = ServiceConfiguration.configurations.findOne({service: 'google'});
if (!config) {
throw new ServiceConfiguration.ConfigError();
}
console.log(token, config);
var endpoint = 'https://accounts.google.com/o/oauth2/token';
var params = {
code: token,
client_id: config.clientId,
client_secret: OAuth.openSecret(config.secret),
redirect_uri: OAuth._redirectUri('google', config),
grant_type: 'authorization_code',
};
try { <------------------------------------------------------ this fails
response = HTTP.post(endpoint, { params: params });
} catch (err) {
throw _.extend(new Error("(first) Failed to complete OAuth handshake with Google. " + err.message),
{response: err.response});
}
if (response.data.error) { // if the http response was a json object with an error attribute
throw new Error("(second) Failed to complete OAuth handshake with Google. " + response.data);
} else {
return {
accessToken: response.data.access_token,
refreshToken: response.data.refresh_token,
expiresIn: response.data.expires_in,
idToken: response.data.id_token
};
}
Приведенная выше ошибка [400] { "error" : "invalid_grant" }
.
Большая часть приведенного выше кода я получил от того, как учетные записи метеоров - пакеты google регистрируются пользователем (что отлично работает в моем приложении). Ссылка на что:
Любые советы о том, как действовать дальше?
Высокую оценку
Update1:
я получаю эти предупреждения в моем журнале
W20150318-09:11:42.532(1) (oauth_server.js:71) Unable to base64 decode state from OAuth query: undefined
W20150318-09:11:42.532(1) (oauth_server.js:71) Unable to base64 decode state from OAuth query: undefined
W20150318-09:11:42.533(1) (oauth_server.js:71) Unable to base64 decode state from OAuth query: undefined
W20150318-09:11:42.534(1) (oauth_server.js:398) Error in OAuth Server: Match error: Expected string, got undefined
Просто убедитесь, что вы создали свой собственный clientID и clientSecret, правильно? 400, как правило, вызваны неправильными параметрами запроса, поэтому я предлагаю попытаться проследить, какой метод вызывает ошибку, и убедиться, что он вызван правильно. – Andy
Да, я их создал. Кроме того, это не мое приложение, которое генерирует ошибку, но оно возвращается из API google – Tarlen
Есть ли у вас какие-либо сетевые следы запросов к google OAuth? Кроме того, вы получаете код авторизации от своего клиента и видите ошибку во время обмена кодами? – class