2016-08-05 11 views
3

私はOAuth 2で23andMe APIを使用して認証しています。ユーザがアクセスを許可した後でコードを受け取ることができます。私は現在、アクセストークンを受け取るための投稿要求を送信しようとしています。私はこのエラーを引き続き受け取ります:23andMe APIエラー: 'grant_typeが指定されていません。' 'invalid_request' OAuth2

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

私は投稿要求をするためにaxiosパッケージを使用しています。私はカールたとき、私は成功した200応答とアクセストークンを得たので、私の要求にエラーがあります:

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 npmパッケージを使用してこの問題を解決できました。 それはここで見つけることができます: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'}); 

} 
}); 
関連する問題