Yêu cầu Jun 3rd, 2018 1:13 p.m. 215 0 0
  • 215 0 0
0

How to using passport middleware between nodejs & vuejs

Chia sẻ
  • 215 0 0

Chào mọi người. Mọi người có thể hướng dẫn em đăng nhập bằng passport đc ko ạ? Em đang rất rối vì session không biết đặt ở đâu. Và nếu đặt ơr backend thì check thế nào ở frontend(em xài vuejs). Em cám ơn mọi người

Avatar Tran Duc Thang @thangtd90
Jun 3rd, 2018 2:01 p.m.

Có lẽ em đang có sự nhầm lẫn gì đó ở đây. 😄 Đầu tiên em nên tìm hiểu kỹ hơn về khái niệm SessionCookie. Session được lưu ở Server, và Cookie được lưu ở Browser.

Em có thể tham khảo một vài bài viết trên Viblo:

Thế nên em không việc gì phải bối rối cả, vì Session luôn được lưu ở Server rồi 😂

Còn về cách xác thực người dùng bằng passport thì không rõ em đang gặp vấn đề cụ thể là gì, em có thể tham khảo các bài viết khác trên Viblo:

Avatar Jisson Lyoko @jissonlyoko
Jun 3rd, 2018 2:05 p.m.

@thangtd90 Dạ em cám ơn anh nhiều ạ. Anh có thể cho em ví dụ về sử dụng giữa passport nodejs và vuejs được không ạ. Em cám ơn anh nhiều ạ

Avatar Truong Dang @xdangminhtruongx
Jun 4th, 2018 2:13 a.m.

Mình đoán chắc là bạn tách backend (Nodejs) và frontend (Vuejs) ra làm hai project tách biệt nhau rồi. Bạn có thể tham khảo cách là ở Nodejs thêm middeware accept cross domain. Sau đó thì bên Nodejs vẫn giữ lại phiên đăng nhập của bên Vuejs như bình thường. Bạn thêm mấy dòng sau để accept cross domain

app.use(function(req, res, next) {
	res.header('Access-Control-Allow-Credentials', true);
	res.header('Access-Control-Allow-Origin',  req.headers.origin);
	res.header('Access-Control-Allow-Methods','OPTIONS,GET,PUT,POST,DELETE');
	res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, X-XSRF-TOKEN');
	
        next();
});

Ví dụ bạn dùng passport để đăng nhập :

router.post('/login', function (req, res, next) {
	passport.authenticate('local', function (err, user) {
		if (err) { throw new errr; }

		if (!user) {
			return res.status(401).json({
				failureMessage: 'Invalid username or password!'
			});
		}

		return req.logIn(user, function (err) {
			return res.status(200).json({
                               messages : 'Login successfull'
                       })
		});

	})(req, res, next);
});

Bây h mỗi lần đăng nhập bên Vuejs bạn gửi thông tin đăng nhập sang /login như bình thường thôi ý. Cách này khổ cái là bất cứ chỗ nào cần thông tin user thì mình cứ phải gửi lại cho nó req.user từ bên Nodejs sang... 😄 😄 😄

Avatar Tran Duc Thang @thangtd90
Jun 4th, 2018 2:20 a.m.

@jissonlyoko À sorry em, anh không để ý, tưởng em hỏi về Passport của Laravel, hoá ra không phải 😂

Em dùng Passport Nodejs thì không biết có phải là dùng http://www.passportjs.org/ không nhỉ 🤔

Jun 4th, 2018 11:25 a.m.

Em đặt câu hỏi hơi thiếu dữ kiện. Lần sau nếu đặt câu hỏi anh nghĩ em có thể ghi cụ thể hơn một chút về kiến trúc của hệ thống.

VD: Backend đang dùng Express, Bên front end dùng Vue.js. Tách làm 2 repo riêng... Như thế mọi người sẽ support nhanh hơn vì đầy đủ dữ kiện hơn.

Avatar Jisson Lyoko @jissonlyoko
Jun 5th, 2018 12:59 p.m.

@huukimit Dạ anh Kim

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí