| import { Injectable, Inject } from '@nestjs/common'; |
| import * as bcrypt from 'bcrypt'; |
| import { JwtService } from '@nestjs/jwt'; |
| import { UserService } from '../user/user.service'; |
| import { Model } from 'mongoose'; |
| import { CommonServices } from '../shared/common.service'; |
| var qs = require('qs'); |
|
|
| @Injectable() |
| export class AuthService extends CommonServices { |
| constructor( |
| private readonly userService: UserService, |
| private jwtService: JwtService, |
| ) { |
| super(); |
| } |
|
|
| async login(user: any, body: any = {}) { |
| const payload = { |
| userId: user._id, |
| name: user.name, |
| email: user.email, |
| roles: user.roles, |
| }; |
|
|
| return { |
| access_token: this.jwtService.sign(payload, { |
| secret: 'secretKey', |
| expiresIn: '60d', |
| }), |
| user: { |
| _id: user._id, |
| name: user.name, |
| email: user.email, |
| roles: user.roles, |
| createdAt: user.createdAt, |
| updatedAt: user.updatedAt, |
| }, |
| }; |
| } |
|
|
| async validateUser(identifier: string, password: string): Promise<any> { |
| console.log(`IDENTIFIER =>`, identifier); |
| console.log(`password =>`, password); |
| const user = await this.userService.userRepository |
| .findOne({ |
| $or: [{ email: identifier }, { username: identifier }], |
| }) |
| .select('+password'); |
| if (user && bcrypt.compareSync(password, user.password)) { |
| return user; |
| } else { |
| const userInLowerCase = await this.userService.userRepository |
| .findOne({ |
| $or: [ |
| { email: identifier.toLowerCase() }, |
| { username: identifier.toLowerCase() }, |
| ], |
| }) |
| .select('+password'); |
| if ( |
| userInLowerCase && |
| bcrypt.compareSync(password, userInLowerCase.password) |
| ) { |
| return userInLowerCase; |
| } |
| } |
| return null; |
| } |
|
|
| async validateByEmail(identifier: string): Promise<any> { |
| const user = await this.userService.userRepository.findOne({ |
| $or: [{ email: identifier }, { username: identifier }], |
| }); |
|
|
| if (user) { |
| const rUser = { |
| userId: user._id, |
| name: user.name, |
| username: user.username, |
| email: user.email, |
| roles: user.roles, |
| |
| |
| }; |
| return rUser; |
| } else { |
| const userInLowerCase = await this.userService.userRepository.findOne({ |
| $or: [ |
| { email: identifier.toLowerCase() }, |
| { username: identifier.toLowerCase() }, |
| ], |
| }); |
| if (userInLowerCase) { |
| const rUser = { |
| userId: userInLowerCase._id, |
| name: userInLowerCase.name, |
| username: user.username, |
| email: userInLowerCase.email, |
| roles: userInLowerCase.roles, |
| }; |
| return rUser; |
| } |
| } |
| return null; |
| } |
| } |
|
|