我正在使用護照js進行登錄註冊過程。一旦有新用戶登錄,cookie就會在包含數據庫唯一密鑰的瀏覽器上創建(由我自定義)。手動創建已登錄的護照會話用戶
因此,該程序的工作原理是:
如果新的人登錄Cookie是這個函數創建
function setCookie(cname,cvalue,exdays) {
//alert("Cookie set on tedJavascript");
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
然後登錄頁面上輸入的信息被髮送到發佈的服務器功能(護照JS)。下面 本地策略驗證碼給出(同樣遵循客人,FB等)
passport.use('guest',new LocalStrategy(
function(username,password,done){
User.getUserBycookie(password, function(err, user){
if(err) throw err;
//if cookie present (checked in terms of password)
if(user){
//Some code
user.save()
}
else{
console.log("some problem with updating guest user by db id!");
}
});
return done(null, user);
}
//if cookie not present
else {
// some part of code for new user
var newUser = new User();
newUser.guest.cookie = newUser._id;
trophytable_id = newUser._id;
newUser.guest.name = username;
newUser.save(function(err){
if(err) throw err;
return done(null, newUser);
});
}});}));
護照JS自動驗證使用的策略信息的地方,客人,Facebook,微博等,如果正確的話它創建會議。
但是,如果一個已經登錄過的人進入網站,它首先會檢查瀏覽器中是否存在cookie,如果它存在,它會挑選數據庫密鑰。
知道密鑰後,它會從數據庫(mongodb)中找到用戶的詳細信息,並直接跳過登錄頁面並重定向到主菜單。
但問題是它重定向到主菜單,但無法創建進一步創建問題的會話所以想要再次創建會話哪些護照爲新用戶自動創建。
這是保證認證的功能
function ensureAuthenticated(req, res, next){
console.log("Inside ensureAuthenticated...............");
if(req.isAuthenticated()){
console.log("Inside if part of ensureAuthenticated-------");
console.log(req.cookies);
return next();
} else {
console.log("Inside else part of ensureAuthenticated----------");
console.log(req.cookies.user_id);
if(isEmpty(req.cookies.user_id)){
console.log("user_id == undefined");
res.redirect('/users/login');
}
else{
console.log("user_id defined");
return next();
}
}
}
下一個()導致:
router.get('/',ensureAuthenticated, function(req,res){
console.log("Inside router get ensure authenticated--------------------");
if(isEmpty(req.session.passport)){
//**have to create new session**
//**getting user details from database**
User.getUserBydbid(req.cookies.user_id, function(err, user){
if(err) throw err;
if(user){
if(!isEmpty(user.local)){
//**here i want to create session**
}else if(!isEmpty(user.guest)){
//**here i want to create session**
}
//skipped fb,twitter code
}
else console.log("*********some problem in finding getUserBydbid");
});
//after creating session want to redirect to main menu
//it works but session not created
//res.render('index',{userid:req.cookies.user_id});
}
else{
//for newly logged in user
res.render('index',{userid:req.session.passport.user});
}});
我怎麼可以手動創建護照會在用戶已經登錄?
感謝您的努力,但我應該在哪裏發回用戶? – wrangler
這是一個像我不清楚。看看文檔,我猜想用戶對象在例子 'User.findOrCreate({openId:identifier},function(err,user){err,user}; });' 或者檔案交換部分。 –