gpt4 book ai didi

node.js - 在 Node 中使用 Passport 中间件进行 Twitter 身份验证

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:27 24 4
gpt4 key购买 nike

我正在使用 Node.js(使用 Express 框架)开发一个网站。为了使用 Twitter 身份验证,我使用了 passport 模块 (http://passportjs.org),以及他的名为 passport-twitter 的 Twitter 包装器。

我的服务器端脚本是:

/**
* Module dependencies.
*/

var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, passport = require('passport')
, keys = require('./oauth/keys')
, TwitterStrategy = require("passport-twitter").Strategy;

var app = express();

app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('foo'));
app.use(express.session());
// Initialize Passport! Also use passport.session() middleware, to support
// persistent login sessions (recommended).
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
app.use(express.errorHandler());
});

passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});

passport.use(new TwitterStrategy({
consumerKey: keys.twitterConsumerKey,
consumerSecret: keys.twitterConsumerSecret,
callbackURL: "http://local.host:3000/auth/twitter/callback"
},
function(token, tokenSecret, profile, done) {
User.findOrCreate({ twitterId: profile.id }, function (err, user) {
if (err) { return done(err); }
else { return done(null, user); }
});
}
));

app.get('/', routes.index);
app.get('/contacts', routes.contacts);
app.get('/cv', routes.cv);
app.get('/projects', routes.projects);
app.get('/users', user.list);

// Redirect the user to Twitter for authentication.
// When complete, Twitter will redirect the user back to the
// application at /auth/twitter/callback
app.get('/auth/twitter', passport.authenticate('twitter'));

// Twitter will redirect the user to this URL after approval. Finish the
// authentication process by attempting to obtain an access token. If
// access was granted, the user will be logged in. Otherwise,
// authentication has failed.
app.get('/auth/twitter/callback',
passport.authenticate('twitter',
{
successRedirect: '/',
failureRedirect: '/login'
}
)
);

http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});

与登录关联的 URI 是 http://local.host:3000/auth/twitter;当我访问它时,Twitter 向我显示了用于将我的帐户与我自己的网站相关联的身份验证表单,但是在这一步之后,出现以下错误:

Express
500 ReferenceError: User is not defined

我该如何解决这个问题?最好的问候,Vi。

最佳答案

您必须在某处定义您的用户类型。看起来您希望这个东西 User 存在并具有函数 findOrCreatefindById,但您从未在任何地方定义它。您在哪里“找到”这些用户?那些没有找到的,它们在哪里被“创造”?你在使用数据库吗?你如何连接到数据库?我认为您忘记了“模型”步骤。你可能想看看 Mongoose Auth这就像 Passport,但它直接插入 Mongoose , 它连接到一个 Mongo数据库

关于node.js - 在 Node 中使用 Passport 中间件进行 Twitter 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com