| | 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; |
| | } |
| | } |
| |
|