我尝试使用我的angularjs / ionic应用程序中的Stripe对现有用户进行身份验证,并将其Stripe详细信息添加到其现有帐户中。
Passport适用于本地/社交登录,但使用Stripe我被建议使用Sessions,我不认为会话是相互识别的(可以/应该在没有会话的情况下完成吗?)。
SerializeUser被调用正常,并且一旦用户被认证" req.sessionStore.sessions"返回并包含到目前为止的所有会话,我想获得相应/正确的会话。我想我可能不完全理解使用会话背后的概念,我正在寻找建议。
我设置我的护照以使用这样的会议:
--make-bed --out unique_file
我的路线看起来像这样
app.use(session({
secret: config.sessionSecret,
resave: false,
saveUninitialized: false,
cookie: {secure: false, maxAge: (4*60*60*1000)}
}));
app.use(passport.initialize());
app.use(passport.session());
我的SerializeUser和DeserializeUser看起来像这样
router.get('/auth/stripe', passport.authenticate('stripe'));
router.get('/auth/stripe/callback', function(req, res, next) {
passport.authorize('stripe', function(err, user, info) {
res.redirect('http://localhost:8100/#/tab/create');
})(req, res, next)
});
然后我的Stripe Passport策略如下所示:
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(id, done) {
done(null, id);
});
在我的护照策略中的console.log点,req.sessionStore.sessions的输出如下所示:
passport.use(new StripeStrategy(config.stripe, function(req, accessToken, refreshToken, stripe_properties, done) {
console.log(req.sessionStore.sessions);
User.where({stripeId: stripe_properties.stripe_user_id}).fetch().then(function(user) {
if(!user) {
// TODO add stripe auth to users account
var newUser = new User();
newUser.set({
stripeId: stripe_properties.stripe_user_id,
email: 'test1'
});
newUser.save().then(function() {
console.log('saved stripeId');
return done(null, user);
});
}
return done(null, user);
}).catch(function(err) {
console.log(err);
return err;
});
}));
并包含到目前为止的所有会话,但我似乎无法访问它们(即使我可以知道这不是正确的答案)。
我在概念上缺少什么,并且代码明智地将发送到Stripe的会话与回来的会话连接起来?
为什么我的deserializeUser永远不会被调用?
非常感谢任何帮助!!