auth.service.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { PhoneLoginDto } from './dto/login.dto'
  2. import { Injectable, UnauthorizedException } from '@nestjs/common'
  3. import { JwtService } from '@nestjs/jwt'
  4. import { UsersService } from '../users/users.service'
  5. import { Role } from 'src/model/role.enum'
  6. import { UserRegisterDto } from 'src/users/dto/user-register.dto'
  7. @Injectable()
  8. export class AuthService {
  9. constructor(private readonly usersService: UsersService, private readonly jwtService: JwtService) {}
  10. async loginByPhone(loginDto: PhoneLoginDto) {
  11. let user = await this.usersService.loginByPhone(loginDto.phone, loginDto.code, loginDto.invitor)
  12. const payload = {
  13. username: user.username,
  14. sub: user.id,
  15. roles: user.roles
  16. }
  17. this.usersService.updateIat(user)
  18. return {
  19. access_token: this.jwtService.sign(payload)
  20. }
  21. }
  22. async login(username: string, password: string) {
  23. let user = await this.usersService.login(username, password)
  24. const payload = {
  25. username: user.username,
  26. sub: user.id,
  27. roles: user.roles
  28. }
  29. this.usersService.updateIat(user)
  30. return {
  31. access_token: this.jwtService.sign(payload)
  32. }
  33. }
  34. async loginAdmin(username: string, password: string) {
  35. let user = await this.usersService.login(username, password)
  36. if (!user.roles.includes(Role.Admin)) {
  37. throw new UnauthorizedException('Permission denied')
  38. }
  39. const payload = {
  40. username: user.username,
  41. sub: user.id,
  42. roles: user.roles
  43. }
  44. this.usersService.updateIat(user)
  45. return {
  46. access_token: this.jwtService.sign(payload)
  47. }
  48. }
  49. async getToken(id: number) {
  50. let user = await this.usersService.findById(id)
  51. const payload = {
  52. username: user.username,
  53. sub: user.id,
  54. roles: user.roles
  55. }
  56. return {
  57. access_token: this.jwtService.sign(payload)
  58. }
  59. }
  60. async register(register: UserRegisterDto) {
  61. return await this.usersService.register(register)
  62. }
  63. }