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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

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

Twitter

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

JavaScript

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

Express

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

Q&A

0回答

2580閲覧

express + passport-twitter でメールアドレスを取得するには

TEA

総合スコア65

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

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

Twitter

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

JavaScript

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

Express

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

0グッド

1クリップ

投稿2016/01/27 08:59

expressとpassportでユーザー認証を行う際、passport-twitterなどの使ってSNSアカウントで認証できるようなWebアプリを作っています。この中で、登録されているユーザーにメールで情報を配信したいと思っています。

そこでご質問ですが、メールアドレスはどのように取得するのが順当な方法でしょうか?例えばユーザーがtwitterアカウントで認証した際に、メールアドレスを登録するような処理が改めて必要になってくるのでしょうか?

ご存知な方がいらっしゃいましたら、アドバイスを宜しくお願いします。

コードはExpress4 + Passport を使った会員サイトの簡単サンプル | try catch and ...releaseを参考にしながら、tiwtter認証を追加しているところです。

package.json

json

1{ 2 "name": "passport-express4-sample", 3 "version": "0.0.0", 4 "private": true, 5 "scripts": { 6 "start": "node ./bin/www", 7 "test": "./node_modules/mocha/bin/mocha ./test/test.user.js" 8 }, 9 "dependencies": { 10 "body-parser": "~1.13.2", 11 "chai": "*", 12 "cookie-parser": "~1.3.5", 13 "debug": "~2.2.0", 14 "express": "~4.13.1", 15 "express-session": "*", 16 "jade": "~1.11.0", 17 "mocha": "*", 18 "mongoose": "*", 19 "morgan": "~1.6.1", 20 "passport": "*", 21 "passport-local": "*", 22 "passport-local-mongoose": "*", 23 "passport-twitter": "^1.0.3", 24 "serve-favicon": "~2.3.0", 25 "should": "*" 26 } 27} 28

./app.js

javascript

1var TWITTER_CONSUMER_KEY = "*** your key ***"; 2var TWITTER_CONSUMER_SECRET = "*** your secret key ***"; 3var BASE_URL = "*** your url ***"; 4 5var express = require('express'); 6var path = require('path'); 7var favicon = require('serve-favicon'); 8var logger = require('morgan'); 9var cookieParser = require('cookie-parser'); 10var bodyParser = require('body-parser'); 11var session = require('express-session'); 12var mongoose = require('mongoose'); 13var passport = require('passport'); 14var LocalStrategy = require('passport-local').Strategy; 15var TwitterStrategy = require('passport-twitter').Strategy; 16 17 18var routes = require('./routes/index'); 19var users = require('./routes/users'); 20var app = express(); 21app.set('views', path.join(__dirname, 'views')); 22app.set('view engine', 'jade'); 23 24 25app.use( logger('dev') ); 26app.use( bodyParser.json() ); 27app.use( bodyParser.urlencoded({ extended: false }) ); 28app.use( cookieParser() ); 29 30app.use(session({ 31 secret: 'secret secret' , 32 resave: false , 33 saveUninitialized: false 34})); 35app.use( passport.initialize() ); 36app.use( passport.session() ); 37 38 39app.use(express.static(path.join(__dirname, 'public'))); 40app.use('/', routes); 41app.use('/users', users); 42 43 44var Account = require('./models/account'); 45passport.use( new LocalStrategy(Account.authenticate()) ); 46passport.serializeUser( Account.serializeUser() ); 47passport.deserializeUser( Account.deserializeUser() ); 48mongoose.connect('mongodb://localhost/passport_local_mongoose_express4'); 49 50passport.use( new TwitterStrategy({ 51 consumerKey: TWITTER_CONSUMER_KEY, 52 consumerSecret: TWITTER_CONSUMER_SECRET, 53 callbackURL: BASE_URL+'/auth/twitter/callback' 54 }, 55 function(token, tokenSecret, profile, done) { 56 57 var acc = new Account(); 58 acc.username = profile.username; 59 acc.password = ""; 60 acc.twitter.id = profile.id; 61 62 acc.save(function(err) { 63 if (err)throw err; 64 return done(null,acc); 65 }); 66 } 67)); 68 69app.get('/auth/twitter' , passport.authenticate('twitter') ); 70app.get('/auth/twitter/callback', passport.authenticate('twitter', { 71 failureRedirect: '/' 72 }), 73 function(req, res) { 74 res.redirect('/'); 75 } 76); 77 78// catch 404 and forward to error handler 79app.use(function(req, res, next) { 80 var err = new Error('Not Found'); 81 err.status = 404; 82 next(err); 83}); 84 85// development error handler 86// will print stacktrace 87if (app.get('env') === 'development') { 88 app.use(function(err, req, res, next) { 89 res.status(err.status || 500); 90 res.render('error', { 91 message: err.message, 92 error: err 93 }); 94 }); 95} 96 97// production error handler 98// no stacktraces leaked to user 99app.use(function(err, req, res, next) { 100 res.status(err.status || 500); 101 res.render('error', { 102 message: err.message, 103 error: {} 104 }); 105}); 106 107module.exports = app;

./models/account.js

javascript

1var mongoose = require('mongoose'); 2var Schema = mongoose.Schema; 3var passportLocalMongoose = require('passport-local-mongoose'); 4 5var Account = new Schema({ 6 username: String , 7 password: String , 8 twitter : { 9 id: String 10 } 11}); 12 13Account.plugin(passportLocalMongoose); 14module.exports = mongoose.model('Account', Account);

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問