node.js - Vue oAuth 在快速错误中保持登录状态
问题描述
我正在使用 discord-passport oAuth2 登录运行 Express 服务器localhost:5000
和 Vue 应用程序。
当我登录并在浏览器中发出请求时,它会显示正确的信息,但是当我的 Vue 服务处理程序发出请求时,会发生以下错误,因为 Express 服务器检查用户是否经过身份验证并返回一个字符串localhost:8080
localhost:5000/api/users
data.map is not a function
not logged in :(
我的目标是显示登录用户的信息localhost:8080/#/profile
。
我知道 api 可以在浏览器中工作,我相信问题出在服务处理程序上。
这是api/users
const express = require('express');
const mongodb = require('mongodb');
const router = express.Router()
//get posts
router.get('/', checkAuth,async (req, res) => {
const users = await loadUsersCollection()
res.send(await users.find(req.user['id']).toArray());
})
function checkAuth(req, res, next) {
if (req.isAuthenticated()) return next();
console.log('not logged in')
res.send('not logged in :(');
}
async function loadUsersCollection() {
const client = await mongodb.MongoClient.connect('mongodb+srv://mongodbURI', {
useNewUrlParser: true
});
return client.db('vue_express').collection('users');
}
module.exports = router;
这是服务处理程序
import axios from 'axios'
const url = 'http://localhost:5000/api/users'
class UserService {
// Get user
static getUser() {
return new Promise(async (resolve, reject) => {
try {
const res = await axios.get(url)
const data = res.data;
//if (data == 'not logged in :(') throw 'not logged in'
resolve(
data.map(user => ({
...user,
createdAt: new Date(user.createdAt)
})
)
)
} catch (err) {
reject(err)
}
})
}
}
export default UserService
这是 Vue 模板
<template>
<div>
User Page
<p v-if="error">{{error}}</p>
<button>Click</button>
<div
href="#"
v-for="(user,index) in users"
v-bind:item="user"
v-bind:index="index"
v-bind:key="user._id"
>
<p>Username: {{user.name}}</p>
<p>{{user.email}}</p>
<p>{{user.img}}</p>
<p>{{user.type}}</p>
</div>
</div>
</template>
<script>
import UserService from "../UserService";
export default {
name: "User",
data() {
return {
users: [],
error: "",
name: "",
email: "",
img: "",
type: "",
};
},
async created() {
try {
this.users = await UserService.getUser();
} catch (err) {
this.error = err.message;
}
}
};
</script>
解决方案
passport-discord npm 模块没有设置 cookie。
推荐阅读
- image - 在产品轮播 wcps 中更改产品图片
- typescript - 让 typescript 知道来自 webpack `require.context` 的所有键
- python - 我可以在 Keras 中使用 2d 顺序 CNN 模型进行对象检测或定位吗?
- sql - 为数据集中存在的所有不同的 column2 值填充缺失的 column1 值
- javascript - Javascript:如何使 _.compact 忽略 0 作为虚假值?
- javascript - 动态解构道具?
- java - 如果 Java 中的 else 阻塞,如何在外部获取价值
- spring - 登录 Grails:使用 Log4j2 重新加载外部配置
- ios - 如何在 infoplist.strings 文件中使用用户定义的设置?
- sql-server - SQLSTATE[42000]:[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]'FIELD' 不是可识别的内置函数名