精通 MEAN 使用 OAuth 和 Passport 管理身份验证(3)
 
- UID
- 1066743
|

精通 MEAN 使用 OAuth 和 Passport 管理身份验证(3)
设置服务器端 auth/meetup 路由下一步是创建服务器端 auth/meetup 路由。回想一下,所有服务器端逻辑都存储在应用程序目录中;客户端逻辑存储在 public 文件夹中。
在文本编辑器中打开 app/routes/users.server.routes.js。找到 Facebook 的代码块,复制/粘贴它,将 facebook 替换为 meetup(如清单 5 所示)。
清单 5. app/routes/users.server.routes.js1
2
3
4
5
6
7
8
9
10
11
| // Setting the facebook oauth routes
app.route('/auth/facebook').get(passport.authenticate('facebook', {
scope: ['email']
}));
app.route('/auth/facebook/callback').get(users.oauthCallback('facebook'));
// Setting the meetup oauth routes
app.route('/auth/meetup').get(passport.authenticate('meetup', {
scope: ['email']
}));
app.route('/auth/meetup/callback').get(users.oauthCallback('meetup'));
|
还记得您在上一节中在注册和登录页面上创建的 auth/meetup 的超链接吗?第一个路由 (auth/meetup) 将在用户单击该链接来向服务器发送一个 HTTP GET 请求时触发。Passport 将尝试使用 passport-meetup 策略来验证用户。登录尝试的结果(成功与否)将异步地发送给第二个 auth/meetup/callback 路由。
如果现在单击注册页面上的 Meetup 链接,您会获得一个 500 Server Error,而不是 404。准确地讲,这不是一项改进,但至少会有所进步。下一步:配置 Meetup 策略。
配置 Meetup 策略可以在著名的 config/strategies 目录中找到所有 Passport 策略。将 facebook.js 复制为 meetup.js,然后在文本编辑器中打开 meetup.js。
就像上一节中一样,您将浏览此文件,将所有 facebook 实例替换为 meetup。但这不是一个简单的查找/替换操作。还需要执行一些细微的配置更改。
首先,将文件顶部的必需的库从 Facebook 策略更改为 Meetup 策略(如清单 6 所示)。
清单 6. config/strategies/meetup.js1
2
3
4
5
6
7
8
| /**
* Module dependencies.
*/
var passport = require('passport'),
url = require('url'),
MeetupStrategy = require('passport-meetup').Strategy,
config = require('../config'),
users = require('../../app/controllers/users');
|
接下来,需要自定义传入到新策略中的选项块。这些值在各个策略之间有所不同。清单 7 给出了 Facebook 策略选项,这些选项不适合 Meetup。
清单 7. 不适合 Meetup 的 Facebook 选项1
2
3
4
5
6
7
8
| module.exports = function() {
// Use facebook strategy
passport.use(new FacebookStrategy({
clientID: config.facebook.clientID,
clientSecret: config.facebook.clientSecret,
callbackURL: config.facebook.callbackURL,
passReqToCallback: true
},
|
幸运的是,您之前执行 npm install 的 passport-meetup 模块随带了示例代码。在文本编辑器中打开 node_modules/passport-meetup/examples/login/app.js。查找 passport.use 函数调用(如清单 8 所示)。
清单 8. node_modules/passport-meetup/examples/login/app.js1
2
3
4
5
| passport.use(new MeetupStrategy({
consumerKey: MEETUP_KEY,
consumerSecret: MEETUP_SECRET,
callbackURL: "http://127.0.0.1:3000/auth/meetup/callback"
},
|
将这段代码复制到 meetup.js,覆盖 Facebook 代码。接下来,将分号右侧的值更改为清单 9 中所示的值。
清单 9. 将有效的 Meetup 选项1
2
3
4
5
| passport.use(new MeetupStrategy({
consumerKey: config.meetup.consumerKey,
consumerSecret: config.meetup.consumerSecret,
callbackURL: config.meetup.callbackURL,
},
|
|
|
|
|
|
|