2012-09-04 25 views
9

Tôi đang sử dụng Passport.js để đăng nhập vào Node-App của mình. Nhưng trong ứng dụng của tôi, tôi cần truy cập vào ID của người dùng và hiện tại, tôi không có ý tưởng làm thế nào để đạt được điều này!Cách truy cập cookie được đặt bằng Passport.js

Tôi làm cách nào để truy cập id người dùng hoặc tôi có nên tự mình gửi nó trong cookie không?

Trả lời

17

Bạn nên giới thiệu đoạn mã sau vào ứng dụng của bạn, bên cạnh cấu hình trong những chiến lược:

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

passport.deserializeUser(function(obj, done) { 
    done(null, obj); 
}); 

Bằng cách này, khi bạn gọi done chức năng với người sử dụng chứng thực, hộ chiếu sẽ chăm sóc của lưu trữ userId trong cookie. Bất cứ khi nào bạn muốn truy cập userId, bạn có thể tìm thấy nó trong phần yêu cầu. (trong express req["user"]).

Bạn cũng có thể phát triển chức năng serializeUser nếu bạn muốn lưu trữ dữ liệu khác trong phiên. Tôi làm theo cách này:

passport.serializeUser(function(user, done) { 
    done(null, { 
     id: user["id"], 
     userName: user["userName"], 
     email: user["email"] 
    }); 
}); 

Bạn có thể tìm thêm ở đây: http://passportjs.org/docs/configure

+0

tôi có điều này đã i mã của tôi - nhưng tôi cần phải truy cập vào các tập tin cookie về phía khách hàng, sử dụng javascript - có thể như vậy? –

+1

Tôi xin lỗi, tôi không hiểu điều đó từ câu hỏi của bạn. Tôi chỉ phân tích các tập tin cookie trong ứng dụng node.js của tôi và tôi không thấy một bộ bởi passportjs. Kết nối chỉ đặt cookie với sessionId. Phần còn lại của dữ liệu được lưu trữ trên máy chủ. Tôi tin rằng bạn nên tự thiết lập một cookie với các dữ liệu mong muốn và sau đó phân tích nó bằng cách sử dụng javascript trên máy khách. (sử dụng express: [link] (http://expressjs.com/api.html#res.cookie)). – AnduA

+1

Tôi đã tự khắc phục sự cố khi đặt cookie của riêng mình nhưng cảm ơn thông tin của bạn! –

16

Thêm vào signin đường

res.cookie('userid', user.id, { maxAge: 2592000000 }); // Expires in one month 

Thêm vào signout đường

res.clearCookie('userid'); 
+0

Tôi nghĩ rằng, câu hỏi là làm thế nào để tích hợp này với hộ chiếu như trong callbacks hộ chiếu và trong chiến lược, chúng tôi có thể không có quyền truy cập để req/res. – viji

1

Nếu bạn sử dụng máy phát điện angular-fullstack, đây là cách tôi đã sửa đổi setUserCookie để nhận được _id trong cookie người dùng (mà sau này tôi có thể truy xuất trong AngularJS).

setUserCookie: function(req, res, next) { 
    if (req.user) { 
     req.user.userInfo['_id'] = req.user._id; 
     console.log('Cookie', req.user.userInfo); 
     // Splice in _id in cookie 
     var userObjWithID = { 
      "provider": req.user.userInfo.provider, 
      "role": req.user.userInfo.role, 
      "name": req.user.userInfo.name, 
      "_id": req.user._id 
     }; 
     res.cookie('user', JSON.stringify(userObjWithID)); 
    } 
    next(); 
} 
0

Hoặc bạn có thể làm như sau:

passport.serializeUser(User.serializeUser()); 

passport.deserializeUser(User.deserializeUser()); 
app.use((req, res, next) => { 
    res.locals.login = req.isAuthenticated(); 
    res.locals.thisUser = req.user; 
    next(); 
}); 
Các vấn đề liên quan