Instantly share code, notes, and snippets.

@shinji5761 /index.ts
Last active Nov 18, 2017

Embed
What would you like to do?
GoogleOAuth
// モジュールのインストール
import express = require('express');
import session = require('express-session');
import cookieParser = require('cookie-parser');
import bodyParser = require('body-parser');
import passport = require('passport');
import passportGoogleOAuth = require('passport-google-oauth');
const app = express();
const GoogleStrategy = passportGoogleOAuth.OAuth2Strategy;
const sessionOption : any = {
'secret' : 'secret'
};
// Google ClientID,Secret
// todo :
// console.log(client);
class Main {
/**
* @constructor
*/
constructor() {
// ミドルウェアの設定
this.settingMiddleware();
// OAuthの設定
this.settingOAuth();
// Routingの設定
this.routing();
// 実行
this.run();
}
/**
* ミドルウェアの設定
* @private
* @return { void }
*/
private settingMiddleware() : void {
app.use(express.static('public'));
app.use(cookieParser());
app.use(bodyParser());
app.use(session(sessionOption));
app.use(passport.initialize());
app.use(passport.session());
}
/**
* OAuth設定
*/
private settingOAuth() : void {
passport.use(
new GoogleStrategy( {
'clientID' : 'クライアントID'
, 'clientSecret' : 'クライアントシークレット'
, 'callbackURL' : 'http://localhost:8080/auth/google/callback'
}, (accessToken, refreshToken, profile, done) => {
done(null, profile);
})
);
passport.serializeUser((user, done) => {
console.log('serialize');
// user情報をセッションに登録する。
done(null, user);
});
passport.deserializeUser((user, done) => {
// Routerが呼ばれるたびに実行される。
// reqに、user情報を付加する。
console.log('deserialize');
// findUser (データベースなどから、ユーザーに関する情報を取得する)
var dbInfo = {'name' : '氏名', 'age' : 20, 'hogehoge' : 'hogehoge'};
// req.userに追加される
done(null, dbInfo);
});
}
/**
* ルーティング設定
*/
private routing() : void {
// Google OAuth
app.get('/auth/google', passport.authenticate('google', {'scope' : ['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile']}));
// Google OAuth CallBack
app.get('/auth/google/callback',
// 認証に失敗した場合、/loginにリダイレクト
passport.authenticate('google', { failureRedirect: '/login' }),
(req, res) => {
// 認証に成功した場合、/homeへリダイレクト
res.redirect('/home');
});
// Home
app.get('/home', (req, res) => {
// Sessionごとのユーザー情報
console.log(req.session.passport.user);
// deserializeで追加されたユーザー情報
res.send(req.user);
})
// Login
app.get('/login', (req, res) => {
res.send(req.user);
});
}
/**
* サーバー実行
*/
private run() : void {
app.listen('8080', (error) => {
if(error) {
console.error(error);
}
else {
console.log('listen...');
}
});
}
}
var main = new Main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment