diff --git a/passport/app.js b/passport/app.js new file mode 100644 index 0000000..9d52f83 --- /dev/null +++ b/passport/app.js @@ -0,0 +1,8 @@ +'use strict'; +module.exports = app => { + app.passport.verify(async (ctx, user) => { + user.photo = user.photo || 'https://zos.alipayobjects.com/rmsportal/JFKAMfmPehWfhBPdCjrw.svg'; + user.displayName = user.displayName || user.name; + return user; + }); +}; diff --git a/passport/app/controller/home.js b/passport/app/controller/home.js index cfca6af..94e8f60 100644 --- a/passport/app/controller/home.js +++ b/passport/app/controller/home.js @@ -23,13 +23,23 @@ class HomeController extends Controller { <hr> Login with <a href="/passport/weibo">Weibo</a> | <a href="/passport/github">Github</a> | - <a href="/passport/bitbucket">Bitbucket</a> | <a href="/passport/twitter">Twitter</a> + <a href="/passport/bitbucket">Bitbucket</a> | <a href="/passport/twitter">Twitter</a> | + <a href="/login">Local</a> <hr> <a href="/">Home</a> | <a href="/user">User</a> </div> `; } } + + async local() { + const { ctx } = this; + if (ctx.isAuthenticated()) { + ctx.body = ctx.user; + } else { + await ctx.render('login.html'); + } + } } module.exports = HomeController; diff --git a/passport/app/router.js b/passport/app/router.js index e7f242f..6b4c3ec 100644 --- a/passport/app/router.js +++ b/passport/app/router.js @@ -3,11 +3,14 @@ module.exports = app => { app.router.get('/', 'home.render'); app.router.get('/user', 'home.render'); + app.router.get('/login', 'home.local'); app.passport.mount('weibo'); app.passport.mount('github'); app.passport.mount('bitbucket'); app.passport.mount('twitter'); + const localStrategy = app.passport.authenticate('local'); + app.router.post('/passport/local', localStrategy); app.router.get('/logout', 'user.logout'); }; diff --git a/passport/app/view/login.html b/passport/app/view/login.html new file mode 100644 index 0000000..d40bbf4 --- /dev/null +++ b/passport/app/view/login.html @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="UTF-8"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <title>egg-passport-local login page</title> +</head> + +<body> + <h1>egg-passport-local login page</h1> + <form method="post" action="/passport/local"> + <div> + <label>Username:</label> + <input type="text" name="username" /> + </div> + <div> + <label>Password:</label> + <input type="password" name="password" /> + </div> + <div> + <input type="submit" value="Log In" /> + </div> + </form> +</body> + +</html> \ No newline at end of file diff --git a/passport/config/config.default.js b/passport/config/config.default.js index 7dc8168..8d72b33 100644 --- a/passport/config/config.default.js +++ b/passport/config/config.default.js @@ -1,5 +1,7 @@ 'use strict'; +exports.keys = 'egg-examples'; + // secure keys on https://github.com/eggjs/egg/wiki#secure-env-for-travis-ci exports.passportWeibo = { key: 'a', @@ -20,3 +22,7 @@ exports.passportTwitter = { key: 'g', secret: 'h', }; + +exports.view = { + defaultViewEngine: 'nunjucks', +}; diff --git a/passport/config/plugin.js b/passport/config/plugin.js index 1ed71bb..ad55aba 100644 --- a/passport/config/plugin.js +++ b/passport/config/plugin.js @@ -24,3 +24,13 @@ exports.passportBitbucket = { enable: true, package: 'egg-passport-bitbucket', }; + +exports.passportLocal = { + enable: true, + package: 'egg-passport-local', +}; + +exports.nunjucks = { + enable: true, + package: 'egg-view-nunjucks', +}; \ No newline at end of file diff --git a/passport/package.json b/passport/package.json index 7baaa87..f0d1e85 100644 --- a/passport/package.json +++ b/passport/package.json @@ -5,8 +5,10 @@ "egg-passport": "^1.0.0", "egg-passport-bitbucket": "^1.0.0", "egg-passport-github": "^1.0.0", + "egg-passport-local": "^1.1.0", "egg-passport-twitter": "^1.0.0", - "egg-passport-weibo": "^1.0.0" + "egg-passport-weibo": "^1.0.0", + "egg-view-nunjucks": "^2.1.4" }, "devDependencies": { "egg-bin": "^4.3.5"