asd*_*klm 5 redirect node.js express reactjs axios
在接受来自Axios的发布请求后,无法使重定向正常工作。我确实知道该请求正在发送,并且至少从“ /”路由中得到了一些响应,因为我的控制台记录了“索引”,“用户验证”,当有人向“ /”发出获取请求时应该发生这种情况'。问题是页面无法加载。我什至在google chrome的“网络”标签中看到index.js已加载,但是无论我尝试了什么,该页面都不会改变!有什么理由吗?
我进行的其他重定向确实可行。例如,如果用户未登录,则索引页面将重新路由到/ login。这似乎仅是发布请求的问题,并且无论是否经过护照认证,我都对其进行了测试(显然已更改为需要登录)进入重定向),结果相同。因此,我认为护照不是造成此问题的原因。
您可以参考下面的package.json查看我正在使用什么
axios代码:
axios.post('/login', {username: username, password: password})
/*.then(response => res.redirect('/'))*/
.then(function (response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
})
Run Code Online (Sandbox Code Playgroud)
表示面:我有控制台日志可在测试期间提醒自己
server.get('/', (req,res) =>{
console.log("Index");
if (req.user){
console.log("user verified");
res.redirect('/');
app.render(req,res, '/',req.query);
} else {
console.log("user not logged in");
res.redirect('/login');
}
})
server.post('/login', passport.authenticate('local'), (req, res, next) => {
if (req.user) {
console.log("Logging in");
res.redirect('/');
} else {
console.log("Passwrod Incorrect");
return res.redirect('/login');
}
})
Run Code Online (Sandbox Code Playgroud)
package.json
{
"name": "layout-component",
"version": "1.0.0",
"scripts": {
"dev": "node ./server.js",
"build": "next build",
"start": "NODE_ENV=production node ./server.js"
},
"dependencies": {
"@zeit/next-css": "^0.1.5",
"axios": "^0.18.0",
"bcryptjs": "^2.4.3",
"body-parser": "^1.18.2",
"connect-flash": "^0.1.1",
"connect-mongo": "^2.0.1",
"cookie-parser": "^1.4.3",
"express": "^4.16.3",
"express-session": "^1.15.6",
"express-validator": "^5.1.0",
"file-loader": "^1.1.11",
"hoist-non-react-statics": "^2.5.0",
"jsonwebtoken": "^8.2.0",
"mongodb": "^3.0.5",
"mongoose": "^5.0.12",
"next": "^5.1.0",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"prop-types": "^15.6.1",
"react": "^16.3.0",
"react-dom": "^16.3.0",
"semantic-ui-css": "^2.3.1",
"semantic-ui-react": "^0.79.0",
"url-loader": "^1.0.1"
},
"license": "ISC"
}
Run Code Online (Sandbox Code Playgroud)
asd*_*klm 10
我想通了。显然,当您发出Axios发布请求时,您无法从服务器进行重定向。至少不是我的操作方式(使用默认的Axios配置。)您需要在客户端进行页面更改。这是我的方法。
这真的让我感到难过,因为我正在使用其他方法从重定向路由接收数据,但是页面未加载。
另外,由于某些原因,使用Next.js,passport.js的“ successRedirect”和“ failureRedirect” JSON似乎不起作用。这就是为什么我按照自己的方式编写路由的原因,而不是将其包含在passport.authenticate()函数中。希望对您有所帮助!
我的Axios提交功能:
onSubmit = (e) => {
e.preventDefault()
const {username, password} = this.state;
axios.post('/login', {username: username, password: password})
.then(function (response) {
if (response.data.redirect == '/') {
window.location = "/index"
} else if (response.data.redirect == '/login'){
window.location = "/login"
}
})
.catch(function(error) {
window.location = "/login"
})
}
Run Code Online (Sandbox Code Playgroud)
我的Express服务器中的发布请求
server.post('/login', passport.authenticate('local'), (req, res, next) => {
if (req.user) {
var redir = { redirect: "/" };
return res.json(redir);
} else {
var redir = { redirect: '/login'};
return res.json(redir);
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20556 次 |
| 最近记录: |