質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

1回答

3173閲覧

Node + Express + Passport でツイッター、Facebook ログイン認証後、ユーザー名を表記したい。

jesushill

総合スコア37

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2016/07/10 01:37

お世話になっております。

現在、Nodeを勉強している初学者です。
SNSログインを行った後、ユーザー名を
ページに表示したいのですが、うまくいきません。

以下に状況、ソースコードを記載させて頂きましたので
アドバイス頂ければ幸いです。

よろしくお願いいたします。


  • 状況

ログイン取得し、コールバックURLまでは表示できたものの、
ユーザー情報が取得できない状態です。

  • 環境
    expressを使用し、ログイン用ミドルウェアはpassportを使用

以下にソースコードを記載します。

javascript

1(app.js) 2 3var express = require('express'); 4var path = require('path'); 5var favicon = require('serve-favicon'); 6var logger = require('morgan'); 7var cookieParser = require('cookie-parser'); 8var bodyParser = require('body-parser'); 9 10var routes = require('./routes/index'); 11var users = require('./routes/users'); 12var oauth = require('./routes/oauth'); 13var app = express(); 14var fboauth = require('./routes/fboauth'); 15 16 17var login = require('./routes/login'); 18var passport = require('passport') 19var TwitterStrategy = require('passport-twitter').Strategy; 20var FacebookStrategy = require('passport-facebook').Strategy; 21var GoogleStrategy = require('passport-google').Strategy; 22 23 24var TWITTER_CONSUMER_KEY = "XXXXXXXXX"; 25var TWITTER_CONSUMER_SECRET = "XXXXXXXXX"; 26var FACEBOOK_APP_ID = "XXXXXXXXX"; 27var FACEBOOK_APP_SECRET = "XXXXXXXXX"; 28 29 30passport.use(new TwitterStrategy({ 31 consumerKey: TWITTER_CONSUMER_KEY, 32 consumerSecret: TWITTER_CONSUMER_SECRET, 33 callbackURL: "http://127.0.0.1:3000/" 34 }, 35 function(token, tokenSecret, profile, done) { 36 process.nextTick(function() { 37 return done(null, profile); 38 }); 39 } 40)); 41 42 43passport.use(new FacebookStrategy({ 44 clientID: FACEBOOK_APP_ID, 45 clientSecret: FACEBOOK_APP_SECRET, 46 callbackURL: "http://myapp.jp:3000/", 47 enableProof: false 48 }, 49 function(accessToken, refreshToken, profile, done) { 50 console.dir(profile); 51 process.nextTick(function () { 52 return done(null, profile); 53 }); 54 } 55)); 56 57passport.serializeUser(function(user, done){ 58 done(null, user); 59}); 60 61passport.deserializeUser(function(obj, done){ 62 done(null, obj); 63}); 64 65app.use(require('express-session')({ 66 secret: 'keyboard cat', 67 resave: false, 68 saveUninitialized: false 69})); 70 71app.get('/auth', passport.authenticate('twitter')); 72 73app.get('/auth/callback', 74 passport.authenticate('twitter',{failureRedirect: '/fail'}), 75 function(req, res) { 76 res.redirect('/'); 77 } 78); 79 80app.get('/auth', passport.authenticate('facebook')); 81 82app.get('/auth/callback', 83 passport.authenticate('facebook',{failureRedirect: '/fail'}), 84 function(req, res) { 85 res.redirect('/'); 86 } 87); 88 89 90 91// view engine setup 92app.set('views', path.join(__dirname, 'views')); 93app.set('view engine', 'ejs'); 94 95// uncomment after placing your favicon in /public 96//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 97app.use(logger('dev')); 98app.use(bodyParser.json()); 99app.use(bodyParser.urlencoded({ 100 extended: false 101})); 102app.use(cookieParser()); 103app.use(express.static(path.join(__dirname, 'public'))); 104 105 106app.use('/',routes); 107 108app.get('/login',login); 109app.use('/oauth', oauth); 110app.use('/fboauth',fboauth); 111app.use('/users', users); 112app.use('/login', login); 113// catch 404 and forward to error handler 114app.use(function(req, res, next) { 115 var err = new Error('Not Found'); 116 err.status = 404; 117 next(err); 118}); 119 120// error handlers 121 122// development error handler 123// will print stacktrace 124if (app.get('env') === 'development') { 125 app.use(function(err, req, res, next) { 126 res.status(err.status || 500); 127 res.render('error', { 128 message: err.message, 129 error: err 130 }); 131 }); 132} 133 134// production error handler 135// no stacktraces leaked to user 136app.use(function(err, req, res, next) { 137 res.status(err.status || 500); 138 res.render('error', { 139 message: err.message, 140 error: {} 141 }); 142}); 143 144module.exports = app; 145

javascript

1//oauth.js (ツイッター処理を記載) 2 3//twitter ログイン処理を記述 4 5var express = require('express'); 6var router = express.Router(); 7var passport = require('passport'); 8 9router.get('/', passport.authenticate('twitter'), function (req, res, next) { 10 console.log(req, res, next); 11}); 12 13router.get('/callback',passport.authenticate('twitter', { failureRedirect: '/login' }), function(req, res) { 14 console.dir(res); 15 console.log(res); 16 res.redirect('/'); 17 session: req.session.passport 18}); 19 20module.exports = router;

javscript

1 2//index.js 3//リダイレクトした後、ユーザー情報を取得 4 5var express = require('express'); 6var router = express.Router(); 7 8router.get('/',function(req,res){ 9 res.render('login',{ 10 title: req.session.passport 11 }); 12}); 13 14module.exports = router; 15 16

HTML

1 2 3<!-- ファイル名:index.ejs 4login画面 取得した情報を h1タグに表示 --> 5 6<!DOCTYPE html> 7<html lang="en"> 8<head> 9 <meta charset="UTF-8"> 10 <title>Login</title> 11 <link rel="stylesheet" href="/stylesheets/reset.css"> 12 <link rel="stylesheet" href="/stylesheets/style.css"> 13</head> 14 15<body> 16 <div class="form-wrapper"> 17 18<!-- 取得した情報を表示 --> 19 <h1><%=req.session.passport.displayName %></h1> 20 <form> 21 <div class="form-item"> 22 <label for="email"></label> 23 <input type="email" name="email" required="required" placeholder="Email Address"></input> 24 </div> 25 <div class="form-item"> 26 <label for="password"></label> 27 <input type="password" name="password" required="required" placeholder="Password"></input> 28 </div> 29 <div class="button-panel"> 30 <a href="/oauth" class="btn-large waves-effect waves-light" style="text-transform: none;">Twitterでログイン</a> 31 <a href="/fboauth" class="btn-large waves-effect waves-light" style="text-transform: none;">facebookログイン</a> 32 <input type="submit" class="button button_login" title="Sign In" value="Sign In"></input> 33 <input type="submit" class="button button_facebook" title="Sign In" value="FACEBOOK"></input> 34 <input type="submit" class="button button_google" title="Sign In" value="GOOGLE"></input> 35 </div> 36 </form> 37 <div class="form-footer"> 38 <p><a href="#">Create an account</a></p> 39 <p><a href="#">Forgot password?</a></p> 40 </div> 41 </div> 42</body> 43 44</html> 45

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

サーバーサイドではユーザー情報は取得できているか確認してますか?

投稿2016/07/10 02:54

sekitaka_1214

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jesushill

2016/07/10 03:04

連絡ありがとうございます。確認はしておりません。 お恥ずかしい話ですが、サーバーサイドでの確認方法自体がよくわかっておりません。
jesushill

2016/07/10 04:14

すみませんが、確認方法をご教授いただくことはできないでしょうか。 参考になるページで構いませんので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問