私は3種類のユーザーを持っています:
- ビューアー(サインインへのリンク: auth/ v /twitter)
- 作成者(サインインへのリンク: auth/ c /twitter)
- 管理者(サインインへのリンク: auth/ a /twitter)
また、3つの異なるデータベース/コレクションがあります
- c_viewer
- c_creator
- c_admin
ユーザーの種類ごとに、サインインするためのリンクが異なります。
それでは、コードを見てみましょう
var passport = require('passport')
,TwitterStrategy = require('passport-twitter').Strategy;
passport.use(new TwitterStrategy({
consumerKey: config.development.tw.consumerKey,
consumerSecret: config.development.tw.consumerSecret,
callbackURL: config.development.tw.callbackURL
},
function(token, tokenSecret, profile, done) {
process.nextTick(function(req, res) {
var query = User.findOne({ 'twId': profile.id});
query.exec(function(err, oldUser){
if(oldUser) {
done(null, oldUser);
} else {
var newUser = new User();
newUser.twId = profile.id;
newUser.twUsername = profile.username;
newUser.name = profile.displayName;
newUser.avatar = profile.photos[0].value;
-> newUser.age = req.body.creator.age; ???
newUser.save(function(err) {
if(err) throw err;
done(null, newUser);
});
};
});
});
}));
app.get('/auth/c/twitter', passport.authenticate('twitter'),
function(req, res) {
var userUrl = req.url;
// codes to pass the userUrl to TwitterStrategy
});
app.get('/auth/twitter/callback',
passportForCreator.authenticate('twitter', { successRedirect: '/dashboard', failureRedirect: '/' }));
そして、これが私のフォームです
<input type="text" name="creator[age]" placeholder="How old are you?">
<a id="si" class="btn" href="/auth/c/twitter">Sign in</a>
私の質問:
1.<input>
ログインプロセスにデータを渡すことはできますか? TwitterStrategy で入力データを読み取り、db に保存できます
2.ログイン URL (auth/ c /twitter) から "c" を取得して TwitterStrategy に渡すことはできますか? そのため、別のデータベース/コレクションをチェックインして、クエリを変更するだけです。