2017-11-12 7 views
2

私はpassport-github戦略を使用しています。APIを介して要点を投稿する方法(匿名ではない)

passport.use(new Strategy({ 
    clientID: "...", 
    clientSecret: "...", 
    callbackURL: 'http://localhost:3000/login/github/return', 
    scope: 'gist' 
    }, 
    function(accessToken, refreshToken, profile, cb) { 
    return cb(null, profile); 
    })); 

それから私はPOST要求

app.get('/profile/post', 
    require('connect-ensure-login').ensureLoggedIn(), 
    function(req, res){ 
var url = 'https://api.github.com/gists'; 

axios.post(url, { 
    method: "POST", 
    "description": "POSTING FROM EXPRESS", 
    "public": true, 
    "files": { 
    "file1.txt": { 
     "content": "EXPRESS " 
    } 

} 
}) 
    .then(function (response) {...}) 
    .catch(function (error) { ... }); 

要旨は匿名で作成されますが、ますを作ります。

リクエスト引数の一部として"owner""user"を渡してみましたが、使用しませんでした。私はまた、URLのユーザー名を渡そうとしました

私が見ることができる限り、これについては何も言わないでください。

答えて

1

パスポート認証コールバックから取得したアクセストークンを保存する必要があります。その後

passport.use(new GitHubStrategy({ 
     clientID: "...", 
     clientSecret: "...", 
     callbackURL: 'http://localhost:3000/login/github/return' 
    }, 
    function(accessToken, refreshToken, profile, done) { 

     process.nextTick(function() { 

      User.findOne({ id: profile.id }, function(err, res) { 
       if (err) 
        return done(err); 
       if (res) { 
        console.log("user exists"); 
        return done(null, res); 
       } else { 
        console.log("insert user"); 
        var user = new User({ 
         id: profile.id, 
         access_token: accessToken, 
         refresh_token: refreshToken 
        }); 
        user.save(function(err) { 
         if (err) 
          return done(err); 
         return done(null, user); 
        }); 
       } 
      }) 
     }); 
    } 
)); 

ユーザーをデシリアライズするとき、あなたが戻ってアクセストークンを持つユーザーを得る:例えば、マングースとモンゴを使用して、ユーザーを保存するために、あなたのエンドポイントで、今

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findOne({ "id": id }, function(err, user) { 
     done(err, user); 
    }); 
}); 

と、置きますgithubのAPIリクエストのヘッダーAuthorizationreq.user.access_token

app.get('/profile/post', 
    require('connect-ensure-login').ensureLoggedIn(), 
    function(req, res) { 

    axios.post('https://api.github.com/gists', { 
     "method": "POST", 
     "description": "POSTING FROM EXPRESS", 
     "headers": { 
     "Authorization" : "token " + req.user.access_token 
     }, 
     "public": true, 
     "files": { 
     "file1.txt": { 
      "content": "EXPRESS " 
     } 
     } 
    }) 
    .then(function (response) {...}) 
    .catch(function (error) { ... }); 
    } 
); 

しかし、その代わりに、手動でリクエストを構築するには、octonodeライブラリTHAを使用することができますあなたのためにそれをしないでください。あなたはoctonodeとmongodbとの完全な例hereのパスポート - githubを見つけることができます

関連する問題