-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
16 changed files
with
308 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,19 @@ | ||
import { Controller } from '@nestjs/common'; | ||
// auth.controller.ts | ||
import { Controller, Post, Body } from '@nestjs/common'; | ||
import { AuthService } from './auth.service'; | ||
import { AuthCredentialsDto } from './dto/auth-credentials.dto'; | ||
|
||
@Controller('auth') | ||
export class AuthController {} | ||
@Controller('proxy/auth') | ||
export class AuthController { | ||
constructor(private authService: AuthService) {} | ||
|
||
@Post('login') | ||
async login( | ||
@Body() authCredentialsDto: AuthCredentialsDto, | ||
): Promise<{ token: string }> { | ||
return this.authService.login( | ||
authCredentialsDto.email, | ||
authCredentialsDto.password, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,22 @@ | ||
import { Module } from '@nestjs/common'; | ||
import { AuthController } from './auth.controller'; | ||
import { JwtModule } from '@nestjs/jwt'; | ||
import { AuthService } from './auth.service'; | ||
import { UserService } from '../user/user.service'; // Импорт UserService | ||
import { AuthController } from './auth.controller'; | ||
import { JwtStrategy } from './jwt/jwt.strategy'; | ||
import { TypeOrmModule } from '@nestjs/typeorm'; | ||
import { User } from '../user/entity/user.entity'; | ||
|
||
@Module({ | ||
imports: [ | ||
TypeOrmModule.forFeature([User]), | ||
JwtModule.register({ | ||
secret: 'your-secret-key', | ||
signOptions: { expiresIn: '1h' }, | ||
}), | ||
], | ||
providers: [AuthService, JwtStrategy, UserService], | ||
controllers: [AuthController], | ||
providers: [AuthService] | ||
exports: [AuthService], | ||
}) | ||
export class AuthModule {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,25 @@ | ||
import { Injectable } from '@nestjs/common'; | ||
// auth.service.ts | ||
import { Injectable, UnauthorizedException } from '@nestjs/common'; | ||
import { JwtService } from '@nestjs/jwt'; | ||
import { UserService } from '../user/user.service'; | ||
|
||
@Injectable() | ||
export class AuthService {} | ||
export class AuthService { | ||
constructor( | ||
private readonly jwtService: JwtService, | ||
private readonly userService: UserService, | ||
) {} | ||
|
||
async login(email: string, password: string): Promise<{ token: string }> { | ||
const user = await this.userService.findByEmail(email); | ||
|
||
if (!user || !(await this.userService.validatePassword(user, password))) { | ||
throw new UnauthorizedException('Invalid credentials'); | ||
} | ||
|
||
const payload = { sub: user.id, email: user.email }; // Можете добавить другие данные пользователя | ||
const token = this.jwtService.sign(payload); | ||
|
||
return { token }; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
// auth-credentials.dto.ts | ||
import { IsString, IsEmail, MinLength, MaxLength } from 'class-validator'; | ||
|
||
export class AuthCredentialsDto { | ||
@IsEmail() | ||
email: string; | ||
|
||
@IsString() | ||
@MinLength(6) | ||
@MaxLength(20) | ||
password: string; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
export interface JwtPayload { | ||
sub: number; // Уникальный идентификатор пользователя (например, ID пользователя в базе данных) | ||
username: string; // Имя пользователя | ||
roles: string[]; // Роли пользователя (например, "user" или "admin") | ||
// Другие пользовательские поля, которые вы хотите включить в токен | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import { Injectable, UnauthorizedException } from '@nestjs/common'; | ||
import { PassportStrategy } from '@nestjs/passport'; | ||
import { ExtractJwt, Strategy } from 'passport-jwt'; | ||
import { JwtPayload } from './jwt-payload.interface'; // Создайте интерфейс JwtPayload для хранения данных в JWT | ||
|
||
@Injectable() | ||
export class JwtStrategy extends PassportStrategy(Strategy) { | ||
constructor() { | ||
super({ | ||
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), | ||
secretOrKey: 'your-secret-key', // Здесь укажите ваш секретный ключ, который используется для подписи и проверки токенов | ||
}); | ||
} | ||
|
||
async validate(payload: JwtPayload) { | ||
// В этом методе вы можете выполнить проверку данных, хранящихся в токене, | ||
// и вернуть пользователя или выбросить исключение UnauthorizedException, если проверка не пройдет. | ||
// Ваш JwtPayload может содержать, например, ID пользователя. | ||
// Проверьте, что пользователь с указанным ID существует в вашей системе. | ||
|
||
// Пример проверки: | ||
// const user = await this.userService.findById(payload.userId); | ||
// if (!user) { | ||
// throw new UnauthorizedException(); | ||
// } | ||
// return user; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
import { Controller } from '@nestjs/common'; | ||
|
||
@Controller('user') | ||
export class UserController {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import { Module } from '@nestjs/common'; | ||
import { UserService } from './user.service'; | ||
import { UserController } from './user.controller'; | ||
import { User } from './entity/user.entity'; | ||
import { TypeOrmModule } from '@nestjs/typeorm'; | ||
|
||
@Module({ | ||
imports: [TypeOrmModule.forFeature([User])], | ||
controllers: [UserController], | ||
providers: [UserService], | ||
}) | ||
export class UserModule {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { Injectable } from '@nestjs/common'; | ||
import { InjectRepository } from '@nestjs/typeorm'; | ||
import { User } from './entity/user.entity'; | ||
import { Repository } from 'typeorm'; | ||
@Injectable() | ||
export class UserService { | ||
constructor( | ||
@InjectRepository(User) | ||
private userRepository: Repository<User>, | ||
) {} | ||
|
||
async findByEmail(email: string): Promise<User> { | ||
return this.userRepository.findOne({ | ||
where: { email }, | ||
}); | ||
} | ||
|
||
async validatePassword(user: User, password: string): Promise<boolean> { | ||
return user.validatePassword(password); | ||
} | ||
} |
Oops, something went wrong.