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