我試圖做一個ajax put
請求後的重定向。我打算使用純JS客戶端進行驗證。從AJAX調用res.redirect
客戶:
$(document).ready(function() {
login =() => {
var username = $("[name='username']").val()
var password = $("[name='password']").val()
$.ajax({
type: "put",
url: '/login',
data: {
username: username,
password: password
}
// success: function(response) {
// console.log('Success:')
// console.log(response.user)
// Cookies.set('username', response.user.username)
// Cookies.set('first_name', response.user.first_name)
// Cookies.set('last_name', response.user.last_name)
// Cookies.set('email', response.user.email)
// window.location.href = window.location.origin + '/'
// },
// error: function(error) {
// console.log("Error:")
// console.log(error)
// }
})
}
logout =() => {
console.log("Log out clicked.")
Cookies.remove('username')
Cookies.remove('first_name')
Cookies.remove('last_name')
Cookies.remove('email')
window.location.href = window.location.origin + '/logout'
}
})
服務器:
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('main')
});
router.put('/login', function(req, res) {
// Password is not encrypted here
console.log('req.body')
console.log(req.body)
User.findOne({ username: req.body.username }, function(err, user) {
// Password is encrypted here
if (err) throw err
console.log('user')
console.log(user)
bcrypt.compare(req.body.password, user.password, function(err, result) {
if (result) {
var token = jwt.encode(user, JWT_SECRET)
// return res.status(200).send({ user: user, token: token })
return res.redirect('/')
} else {
return res.status(401).send({error: "Something is wrong."})
}
})
})
})
我不能讓main.hbs
一個成功登錄後呈現。我的評論代碼工作,但我試圖做我的重定向服務器端而不是客戶端,因爲我被告知,這對安全性更好。
您的評論代碼是正確的工作方式。這裏沒有安全損失。您的重定向以任何方式傳達給用戶。服務器端重定向是爲ajax請求設計的,因爲該指令不是針對瀏覽器的,而是一些JavaScript處理程序。 –
謝謝!這真的很好知道。我評論的代碼對我來說很有意義,我想要朝這個方向發展,但我擔心用戶的安全問題。如果我能夠在客戶端上使用JavaScript(在將請求提交給服務器之前),我將能夠進行自定義驗證,而不僅限於HTML5表單驗證。 – Farid