Skip to content

Commit f66882f

Browse files
committed
add redis for store user data
1 parent 1b78bc8 commit f66882f

File tree

8 files changed

+95
-56
lines changed

8 files changed

+95
-56
lines changed

.env.example

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
APP_ENV=development
2+
APP_API_KEY=intervest-sandbox
23

3-
DB_HOST="db-host"
4+
DB_HOST="pgsql"
45
DB_PORT="5432"
5-
DB_USER="user"
6-
DB_PASS="password"
6+
DB_USER="user_intervest_dev"
7+
DB_PASS="pass_intervest_dev"
78
DB_NAME="core"
89

10+
DB_COMMUNITY_HOST="pgsql-community"
11+
DB_COMMUNITY_PORT="5432"
12+
DB_COMMUNITY_USER="user_intervest_dev"
13+
DB_COMMUNITY_PASS="pass_intervest_dev"
14+
DB_COMMUNITY_NAME="community"
15+
916
MAIL_HOST=host.docker.internal
1017
MAIL_PORT=1025
1118
MAIL_USER=
1219
MAIL_PASS=
1320
MAIL_FROM_DEFAULT='"No Reply" <[email protected]>'
1421

15-
REDIS_URL='redis://crypto-app-redis:6379/1'
22+
REDIS_URL='redis://redis:6379/0'
23+
24+
JWT_SECRET=123k34j3k423jk231jk231j2k31j2k3jj33j
25+
JWT_SECRET_REFRESH=123234234234235234234443
26+
JWT_EXP_AT=60*60*24*7
27+
JWT_REFRESH_EXP_AT=60*60*24*30

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"class-transformer": "^0.5.1",
3737
"class-validator": "^0.14.0",
3838
"ejs": "^3.1.8",
39+
"ioredis": "^5.3.2",
3940
"jsonwebtoken": "^9.0.1",
4041
"passport": "^0.6.0",
4142
"passport-jwt": "^4.0.1",

src/apps/auth/auth.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import { TypeOrmModule } from '@nestjs/typeorm';
55
import { User } from 'src/entities/user.entity';
66
import { UserDevice } from 'src/entities/user-device.entity';
77
import { AccessTokenStrategy, RefreshTokenStrategy } from './strategies';
8+
import { RedisModule } from 'src/modules/redis/redis.module';
89

910
@Module({
1011
imports: [
1112
TypeOrmModule.forFeature([User, UserDevice]),
13+
RedisModule,
1214
],
1315
providers: [AuthService, AccessTokenStrategy, RefreshTokenStrategy],
1416
controllers: [AuthController]

src/apps/auth/auth.service.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import { compare, hash } from 'bcrypt';
1010
import { Request } from 'express';
1111
import { UserDevice } from 'src/entities/user-device.entity';
1212
import { DeviceDTO } from './dto/device.dto';
13+
import { RedisService } from 'src/modules/redis/redis.service';
1314

1415
@Injectable()
1516
export class AuthService {
1617

1718
constructor(
1819
@InjectRepository(User) private usersRepository: Repository<User>,
1920
@InjectRepository(UserDevice) private userDevicesRepository: Repository<UserDevice>,
21+
private readonly redisService: RedisService,
2022
private readonly jwtService: JwtService,
2123
private readonly configService: ConfigService,
2224
) {}
@@ -116,22 +118,26 @@ export class AuthService {
116118
}
117119

118120
async getTokens(user: User, device: DeviceDTO) {
121+
122+
await this.redisService.set(`user-data:${user.id}`, user);
123+
119124
return {
120125
access_token: await this.jwtService.signAsync({
121126
username: user.name,
122127
deviceId: device.id,
123128
id: user.id,
124129
}, {
125130
secret: this.configService.get("JWT_SECRET"),
126-
expiresIn: 15,
131+
expiresIn: eval(this.configService.get('JWT_EXP_AT')),
127132
}),
128133
refresh_token: await this.jwtService.signAsync({
129134
username: user.name,
130135
id: user.id,
131136
deviceId: device.id
132137
}, {
133138
secret: this.configService.get("JWT_SECRET_REFRESH"),
134-
expiresIn: 60 * 60 * 24 * 7,
139+
// expiresIn: 60 * 60 * 24 * 7,
140+
expiresIn: eval(this.configService.get('JWT_REFRESH_EXP_AT')),
135141
}),
136142
}
137143
}
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
import { HttpException, Injectable } from '@nestjs/common';
1+
import { Injectable } from '@nestjs/common';
22
import { ConfigService } from '@nestjs/config'
33
import { PassportStrategy } from '@nestjs/passport'
44
import { ExtractJwt, Strategy } from 'passport-jwt'
5+
import { RedisService } from 'src/modules/redis/redis.service';
56

67
@Injectable()
78
export class AccessTokenStrategy extends PassportStrategy(Strategy, 'jwt') {
89

910
constructor(
1011
configService: ConfigService,
12+
private redisService: RedisService,
1113
) {
1214
super({
1315
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
1416
secretOrKey: configService.get('JWT_SECRET'),
1517
})
1618
}
1719

18-
19-
validate(payload: any) {
20-
21-
return payload;
20+
async validate(payload: any) {
21+
const data = await this.redisService.get(`user-data:${payload.id}`) ?? payload;
22+
console.log(data);
23+
return data;
2224
}
2325

2426
}

src/modules/redis/redis.module.ts

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,17 @@
1-
// import { CacheModule } from '@nestjs/cache-manager';
21
import { Module } from '@nestjs/common';
32
import { RedisModule as IoRedisModule } from '@svtslv/nestjs-ioredis';
4-
// import { redisStore } from 'cache-manager-redis-store';
53
import { RedisService } from './redis.service';
64
@Module({
75
imports: [
8-
// CacheModule.registerAsync({
9-
// isGlobal: true,
10-
11-
// useFactory: async () => ({
12-
// store: <> <unknown> redisStore,
13-
// url: process.env.REDIS_URL,
14-
// }),
15-
16-
// }),
176

187
IoRedisModule.forRootAsync({
198
useFactory: async () => ({
209
config: {
2110
url: process.env.REDIS_URL,
2211
}
2312
})
24-
}, 'real-connection'),
13+
}, 'default'),
2514

26-
IoRedisModule.forRootAsync({
27-
useFactory: async () => ({
28-
config: {
29-
url: process.env.REDIS_DEMO_URL,
30-
}
31-
})
32-
}, 'demo-connection')
3315
],
3416
providers: [RedisService],
3517
exports: [RedisService],

src/modules/redis/redis.service.ts

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,28 @@ import { InjectRedis, Redis } from '@svtslv/nestjs-ioredis';
55
export class RedisService {
66

77
constructor(
8-
// @Inject(CACHE_MANAGER) private cacheManager: Cache,
9-
@InjectRedis('real-connection') private readonly redisRealConnection: Redis,
10-
@InjectRedis('demo-connection') private readonly redisDemoConnection: Redis,
8+
@InjectRedis('default') private readonly redis: Redis,
119
) {}
1210

1311
async get(key: string) {
14-
if(key.indexOf('demo-') > -1) {
15-
return await this.redisDemoConnection.get(key);
16-
}
17-
return await this.redisRealConnection.get(key);
18-
// return this.cacheManager.get(key);
12+
return JSON.parse(await this.redis.get(key));
1913
}
2014

2115
async set(key: string, value: any, ttl?: number) {
22-
console.log('🔥 🔥 🔥 🔥',key, key.indexOf('demo-'));
23-
if(key.indexOf('demo-') != -1) {
24-
return await this.redisDemoConnection.set(key, value);
25-
}
26-
return await this.redisRealConnection.set(key, value);
27-
// await this.cacheManager.set(key, value, ttl)
16+
17+
return await this.redis.set(key, JSON.stringify(value));
2818
}
2919

3020
// get store() {
31-
// return this.redisRealConnection;
21+
// return this.redis;
3222
// // return this.cacheManager.store
3323
// }
3424

3525
async del(key: string) {
36-
if(key.indexOf('demo-') > -1) {
37-
return await this.redisDemoConnection.del(key);
38-
}
39-
return await this.redisRealConnection.del(key);
40-
// await this.cacheManager.store.del(key);
26+
return await this.redis.del(key);
4127
}
4228

4329
async keys(pattern?: any) {
44-
if(pattern.indexOf('demo') > -1) {
45-
return await this.redisDemoConnection.keys(pattern);
46-
}
47-
return await this.redisRealConnection.keys(pattern);
48-
// return this.store.keys(pattern);
30+
return await this.redis.keys(pattern);
4931
}
5032
}

yarn.lock

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,11 @@
427427
resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
428428
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
429429

430+
"@ioredis/commands@^1.1.1":
431+
version "1.2.0"
432+
resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11"
433+
integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==
434+
430435
"@isaacs/cliui@^8.0.2":
431436
version "8.0.2"
432437
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
@@ -2153,7 +2158,7 @@ clone@^1.0.2:
21532158
resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz"
21542159
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
21552160

2156-
2161+
[email protected], cluster-key-slot@^1.1.0:
21572162
version "1.1.2"
21582163
resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz"
21592164
integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==
@@ -2468,6 +2473,11 @@ delegates@^1.0.0:
24682473
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
24692474
integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
24702475

2476+
denque@^2.1.0:
2477+
version "2.1.0"
2478+
resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
2479+
integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
2480+
24712481
24722482
version "2.0.0"
24732483
resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
@@ -3747,6 +3757,21 @@ interpret@^1.0.0:
37473757
resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz"
37483758
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
37493759

3760+
ioredis@^5.3.2:
3761+
version "5.3.2"
3762+
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7"
3763+
integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==
3764+
dependencies:
3765+
"@ioredis/commands" "^1.1.1"
3766+
cluster-key-slot "^1.1.0"
3767+
debug "^4.3.4"
3768+
denque "^2.1.0"
3769+
lodash.defaults "^4.2.0"
3770+
lodash.isarguments "^3.1.0"
3771+
redis-errors "^1.2.0"
3772+
redis-parser "^3.0.0"
3773+
standard-as-callback "^2.1.0"
3774+
37503775
ip@^1.1.5:
37513776
version "1.1.8"
37523777
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
@@ -4562,6 +4587,16 @@ locate-path@^6.0.0:
45624587
dependencies:
45634588
p-locate "^5.0.0"
45644589

4590+
lodash.defaults@^4.2.0:
4591+
version "4.2.0"
4592+
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
4593+
integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==
4594+
4595+
lodash.isarguments@^3.1.0:
4596+
version "3.1.0"
4597+
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
4598+
integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==
4599+
45654600
45664601
version "4.1.2"
45674602
resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"
@@ -6103,6 +6138,18 @@ rechoir@^0.6.2:
61036138
dependencies:
61046139
resolve "^1.1.6"
61056140

6141+
redis-errors@^1.0.0, redis-errors@^1.2.0:
6142+
version "1.2.0"
6143+
resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
6144+
integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==
6145+
6146+
redis-parser@^3.0.0:
6147+
version "3.0.0"
6148+
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
6149+
integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==
6150+
dependencies:
6151+
redis-errors "^1.0.0"
6152+
61066153
redis@^4.3.1:
61076154
version "4.6.7"
61086155
resolved "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz"
@@ -6477,6 +6524,11 @@ stack-utils@^2.0.3:
64776524
dependencies:
64786525
escape-string-regexp "^2.0.0"
64796526

6527+
standard-as-callback@^2.1.0:
6528+
version "2.1.0"
6529+
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45"
6530+
integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==
6531+
64806532
64816533
version "2.0.1"
64826534
resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"

0 commit comments

Comments
 (0)