我已经看到了为经过身份验证的用户支持魔术ID的URI,如下所示:
GET /user/me - list my profile
GET /user/me/photos - list my photos
Run Code Online (Sandbox Code Playgroud)
下面的那些使用实际的用户ID
GET /user/742924
GET /user/742924/photos
Run Code Online (Sandbox Code Playgroud)
我看到的问题是,相同的资源ID指向不同的资源,具体取决于经过身份验证的用户.
这违反任何REST原则吗?
在RESTful和无状态方面,拥有类似资源是非常合法的
/用户/ 123
但是,问题是:拥有省略用户ID的资源并假设它在用户会话中在服务器上隐式解析是合法的吗?例如:
/ loggedUser
当具有标识符123的用户被授权时,该资源将指向/ users/123.
我正在使用 Angular+Nest 开发一个网站。我创建了一个服务(Angular),以便客户端可以在项目启动时从服务器获取用户信息(与新鲜相同)。有些动作不需要登录,所以登录是可选的。
我想要的是如果用户已经登录,那么客户端应该发送一个请求来获取用户的信息。
服务器代码如下:
export const RequestUser = createParamDecorator((data, req): RequestUserDTO => {
return req.user;
});
@Controller('auth')
export class AuthController {
@Get('getUserInfoByToken')
async getUserInfoByToken(@RequestUser() user: User): Promise<any> {
if (user) {
return {
nickname: user.nickname,
level: user.level
};
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现如果我不添加@UseGuards(AuthGuard())为装饰器,就没有任何回报。但是如果我添加它,当项目开始时,这个请求401作为状态代码返回。然后网页将转到登录页面。
我应该怎么做才能避免这种情况?并非每个操作都需要登录。