2016-08-05 2 views
3

Я аутентифицируюсь с помощью API 23andMe с OAuth 2. Я могу получить код после того, как пользователь предоставляет доступ. В настоящее время я пытаюсь отправить запрос на отправку, чтобы получить токен доступа. Я по-прежнему получаю эту ошибку:Ошибка API-интерфейса 23andMe: «Никакой grant_type не предоставлен». 'invalid_request' OAuth2

data: 
    { error_description: 'No grant_type provided.', 
     error: 'invalid_request' } } 

Я использую пакет axios, чтобы отправить запрос. Существует ошибка в моей просьбе, потому что я получил успешный маркер 200 ответа и доступа, когда я Curl:

curl https://api.23andme.com/token/ 
     -d client_id='zzz' \ 
     -d client_secret='zzz' \ 
     -d grant_type='authorization_code' \ 
     -d code=zzz \ 
     -d "redirect_uri=http://localhost:3000/receive_code/" 
     -d "scope=basic%20rszzz" 

Я могу получить код авторизации от сервера 23andMe. Затем меня перенаправляют на мое приложение. Вот мой маршрут GET:

router.get('/receive_code', function(req, res) { 

axios.post('https://api.23andme.com/token/', { 

    client_id: zzz, 
    client_secret: zzz, 
    grant_type: 'authorization_code', 
    code: req.query.code, 
    redirect_uri: 'http://localhost:3000/receive_code/', 
    scope: "basic%20rs3094315" 

    }).then(function (response) { 
    console.log(response); 

    }).catch(function (error) { 
    console.log(error); 
}); 
}); 

Любые мысли?

ответ

0

Проблема заключается в том, что ключ form вы разместили в своей полезной нагрузке. Он должен работать так:

 
axios.post('https://api.23andme.com/token/', { 
    client_id: zzz, 
    client_secret: zzz, 
    grant_type: 'authorization_code', 
    code: req.query.code 
    redirect_uri: 'http://localhost:3000/receive_code/', 
    scope: "basic%20rs3094315" 
}).then(function (response) { 
    console.log(response); 
}).catch(function (error) { 
    console.log(error); 
}); 
+0

Я сделал предложенные изменения. Ошибка продолжается. – vincentjp

+0

Такая же ошибка @vincentjp? Посмотрите на [this repo] (http://github.com/joelalejandro/genocog-api), я внедрил некоторые материалы для подключения к 23andme. Однако имейте в виду, что у них проблемы с демо-профилями, поэтому, возможно, некоторые вызовы API могут вообще не работать. –

0

Я был в состоянии решить эту проблему с помощью пакета НОГО простого oauth2. Его можно найти здесь: https://www.npmjs.com/package/simple-oauth2#express-and-github-example

// **********23ANDME OAUTH2************ 
var oauth2 = require('simple-oauth2')({ 
    clientID: 'zzz', 
    clientSecret: 'zzz', 
    site: 'https://api.23andme.com', 
    tokenPath: '/token', 
    authorizationPath: '/authorize' 
}); 

var authorization_uri = oauth2.authCode.authorizeURL({ 
    redirect_uri: 'http://localhost:3000/receive_code/', 
    scope: 'basic analyses rs1234567', 
    state: 'jenvuece2a' 
}); 
// ************************************* 

// In you view, place "/auth" in your <a> e.g. <a href="/auth">Click Me</a> 
router.get('/auth', function (req, res) { 

res.redirect(authorization_uri); 

}); 

router.get('/receive_code', function(req, res) { 

var code = req.query.code; 

if (!code) { 
    res.send('Error!!') 
} else { 
console.log('running'); 

    oauth2.authCode.getToken({ 
    code: code, 
    redirect_uri: 'http://localhost:3000/receive_code/' 
    }, saveToken); 

    function saveToken(error, result) { 
    if (error) { 
     console.log('Access Token Error', error.message); 
    } else { 
     token = oauth2.accessToken.create(result); 
     console.log(token); 
    } 

    }; 

    res.render('/genetic_report', {layout: 'dash'}); 

} 
}); 
Смежные вопросы