8時-ソーシャル・ログイン(20.11.18)
21729 ワード
始める前に...
git reset --hard 251ff3d0ce25bb2f9490ea226355b43a54088dc9
今日の内容は前回作成したTodolistプロジェクトに続きます.
今日の目標
今日はパスポートjsを使用してソーシャルログインを実現する練習をしましょう.
ココア開発者のWebサイトで設定
KACA開発者のWebサイトでアプリケーションを作成してログインをアクティブにし、Redirect URLを設定します.
ログイン画面の作成
git reset --hard d0c2809a7878805bde19d8715da2e83745134272
羽バニラで見る
まず、開くejsにログイン画面を接続する必要があります.--> routes/index.js
router.get('/login', function(req, res, next) {
res.render('login');
});
--> views/login.ejs
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>소셜로그인</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel='stylesheet' href='/stylesheets/bootstrap-social.css' />
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<style>
.login-form {
width: 340px;
margin: 50px auto;
font-size: 15px;
}
.login-form form {
margin-bottom: 15px;
background: #f7f7f7;
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
padding: 30px;
}
.login-form h2 {
margin: 0 0 15px;
}
.form-control, .btn {
min-height: 38px;
border-radius: 2px;
}
.btn {
font-size: 15px;
font-weight: bold;
}
</style>
</head>
<body>
<div class="login-form">
<form>
<h2 class="text-center">Log in</h2>
<div class="form-group">
<a href="login/kakao">
<img src="/images/kakaoLogin.jpg" width="280"/>
</a>
<a href="login/naver">
<img src="/images/naverLogin.jpg" width="280"/>
</a>
</div>
</form>
</div>
</body>
</html>
必要なモジュールのインストール
今日の実験に必要なモジュールをインストールしましょう.npm i passport passport-kakao express-session
KACAログインの実施
KaKaoStrategyを設定し、ログインロジックを作成します.--> routes/index.js
const express = require('express');
const router = express.Router();
const passport = require('passport');
const KakaoStrategy = require('passport-kakao').Strategy;
/*로그인 성공시 사용자 정보를 Session에 저장한다*/
passport.serializeUser(function (user, done) {
done(null, user)
});
/*인증 후, 페이지 접근시 마다 사용자 정보를 Session에서 읽어옴.*/
passport.deserializeUser(function (user, done) {
done(null, user);
});
// 로그인 판단 로직
const authenticateUser = (req, res, next) => {
if (req.isAuthenticated()) next();
else res.redirect('/login');
};
// 로그인 처리 - 카카오
passport.use('login-kakao', new KakaoStrategy({
clientID : '11648f24758196fb487c9f669f287019',
callbackURL : 'http://localhost:3000/login/kakao/callback' // 카카오 개발자 사이트에서 지정한 리다이렉트 URL
},
function(accessToken, refreshToken, profile, done) {
console.log(profile);
return done(null, profile);
}
));
/* GET home page. */
router.get('/', authenticateUser, function(req, res, next) {
res.render('index');
});
router.get('/login', function(req, res, next) {
res.render('login');
});
router.get('/login/kakao', passport.authenticate('login-kakao'));
router.get('/login/kakao/callback', passport.authenticate('login-kakao', {
successRedirect: '/',
failureRedirect: '/login'
}));
module.exports = router;
セッションの設定
Reference
この問題について(8時-ソーシャル・ログイン(20.11.18)), 我々は、より多くの情報をここで見つけました
https://velog.io/@dalcon/8차시-소셜-로그인-20.11.18
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
今日はパスポートjsを使用してソーシャルログインを実現する練習をしましょう.
ココア開発者のWebサイトで設定
KACA開発者のWebサイトでアプリケーションを作成してログインをアクティブにし、Redirect URLを設定します.
ログイン画面の作成
git reset --hard d0c2809a7878805bde19d8715da2e83745134272
羽バニラで見る
まず、開くejsにログイン画面を接続する必要があります.
--> routes/index.js
router.get('/login', function(req, res, next) {
res.render('login');
});
--> views/login.ejs
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>소셜로그인</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel='stylesheet' href='/stylesheets/bootstrap-social.css' />
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<style>
.login-form {
width: 340px;
margin: 50px auto;
font-size: 15px;
}
.login-form form {
margin-bottom: 15px;
background: #f7f7f7;
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
padding: 30px;
}
.login-form h2 {
margin: 0 0 15px;
}
.form-control, .btn {
min-height: 38px;
border-radius: 2px;
}
.btn {
font-size: 15px;
font-weight: bold;
}
</style>
</head>
<body>
<div class="login-form">
<form>
<h2 class="text-center">Log in</h2>
<div class="form-group">
<a href="login/kakao">
<img src="/images/kakaoLogin.jpg" width="280"/>
</a>
<a href="login/naver">
<img src="/images/naverLogin.jpg" width="280"/>
</a>
</div>
</form>
</div>
</body>
</html>
必要なモジュールのインストール
今日の実験に必要なモジュールをインストールしましょう.
npm i passport passport-kakao express-session
KACAログインの実施
KaKaoStrategyを設定し、ログインロジックを作成します.
--> routes/index.js
const express = require('express');
const router = express.Router();
const passport = require('passport');
const KakaoStrategy = require('passport-kakao').Strategy;
/*로그인 성공시 사용자 정보를 Session에 저장한다*/
passport.serializeUser(function (user, done) {
done(null, user)
});
/*인증 후, 페이지 접근시 마다 사용자 정보를 Session에서 읽어옴.*/
passport.deserializeUser(function (user, done) {
done(null, user);
});
// 로그인 판단 로직
const authenticateUser = (req, res, next) => {
if (req.isAuthenticated()) next();
else res.redirect('/login');
};
// 로그인 처리 - 카카오
passport.use('login-kakao', new KakaoStrategy({
clientID : '11648f24758196fb487c9f669f287019',
callbackURL : 'http://localhost:3000/login/kakao/callback' // 카카오 개발자 사이트에서 지정한 리다이렉트 URL
},
function(accessToken, refreshToken, profile, done) {
console.log(profile);
return done(null, profile);
}
));
/* GET home page. */
router.get('/', authenticateUser, function(req, res, next) {
res.render('index');
});
router.get('/login', function(req, res, next) {
res.render('login');
});
router.get('/login/kakao', passport.authenticate('login-kakao'));
router.get('/login/kakao/callback', passport.authenticate('login-kakao', {
successRedirect: '/',
failureRedirect: '/login'
}));
module.exports = router;
セッションの設定
Reference
この問題について(8時-ソーシャル・ログイン(20.11.18)), 我々は、より多くの情報をここで見つけました https://velog.io/@dalcon/8차시-소셜-로그인-20.11.18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol