大家好,我想了解一些解决问题的技巧。
我有一张存储用户详细信息的表,
ID,FIRST_NAME,LAST_NAME电子邮件,密码,角色,域
我也找到了名为Aliases的表
ID,DOMAIN_ID,DOMAIN,DESTINATION
在用户表中,角色表示管理员,主持人,用户等。例如,域是aaa.pl,bbb.pl。另外Aliases表的域也像aaa.pl,bbb.pl
我只想从表中选择别名,该别名的域与分配给用户的域相同。 因此,用户X只能看到别名“哪里是同一域”。
后端
这是我的控制器
public async aliasesListByDomain(req: Request, res: Response): Promise<void> {
const { domain } = req.params;
const aliasesListByDomain = await pool.query('SELECT * FROM virtual_aliases WHERE domain= ?', [domain]);
if (aliasesListByDomain.length > 0) {
res.json(aliasesListByDomain);
} else {
res.status(404).json({ message: "Alias doesn't exists" });
}
}
这是我对用户进行身份验证的方式
router.post('/authenticate', (req, res) => {
User.findOne({
where: {
email: req.body.email,
password: req.body.password
}
})
.then(user => {
if (user) {
let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
expiresIn: 1440
})
res.json({ token: token })
} else {
res.send('User does not exist')
}
})
.catch(err => {
res.send('error: ' + err)
})
})
现在我的前端有问题。
这是我获得所有别名的服务(无论域如何)
getAliases(): Observable<Alias> {
return this.http.get(`${this.API_URI}/aliases`);
}
在我的组件中,我可以获取所有别名
getAliases() {
this.aliasesService.getAliases().subscribe(
res => {
this.alias = res;
console.log(this.alias);
},
err => console.error(err)
);
}
现在我如何才能仅根据用户权限选择别名。
我尝试过这样的事情:
服务
getAliasesByDomain(domain: string): Observable<Alias> {
return this.http.get(`${this.API_URI}/aliases/${domain}`);
}
这是我的身份验证服务
登录
public login(user: TokenPayload): Observable<any> {
const base = this.http.post(`http://localhost:3000/users/authenticate`, user);
const request = base.pipe(
map((data: TokenResponse) => {
console.log(data);
if (data.token) {
this.saveToken(data.token);
}
return data;
})
)
return request;
}
和用户详细信息
public getUserDetails(): UserDetails {
const token = this.getToken();
let payload;
if (token) {
payload = token.split('.')[1];
payload = window.atob(payload);
return JSON.parse(payload);
} else {
return null;
}
}
我应该在我的组件中获取 usertoken ,然后JSON.parse()
并获取域
登录用户的详细信息?然后将其发送到api?
什么是最佳解决方案?
-编辑 我做了这样的事情:
private getToken(): string {
if (!this.token) {
this.token = localStorage.getItem('usertoken');
}
return this.token;
}
getAliasesByDomain(){
const token = this.getToken();
let user;
if (token) {
user = token.split('.')[1];
user = window.atob(user);
user = JSON.parse(user);
console.log('user z from getAliasesByDomain: '+user.domain);
this.aliasesService.getAliasesByDomain(user.domain).subscribe(
res => {
console.log(res);
this.alias = res;
},
err => console.error(err)
);
}
}