Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
5
51business
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
方斌
51business
Commits
3d38437b
Commit
3d38437b
authored
Apr 13, 2020
by
任国军
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add jwt
parent
4e1c48c8
Pipeline
#21639
passed with stage
in 12 seconds
Changes
9
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
87 additions
and
32 deletions
+87
-32
institution.js
app/controller/course/v5/institution.js
+2
-2
context.js
app/extend/context.js
+4
-8
helper.js
app/extend/helper.js
+4
-7
course_v5.js
app/router/course_v5.js
+6
-5
institution.js
app/service/course/v5/institution.js
+22
-7
user.js
app/service/course/v5/user.js
+3
-3
jwt.js
app/service/jwt.js
+32
-0
config.local.js
config/config.local.js
+7
-0
config.prod.js
config/config.prod.js
+7
-0
No files found.
app/controller/course/v5/institution.js
View file @
3d38437b
...
@@ -8,7 +8,7 @@ class InstitutionController extends Controller {
...
@@ -8,7 +8,7 @@ class InstitutionController extends Controller {
const
{
ctx
}
=
this
;
const
{
ctx
}
=
this
;
const
queryParams
=
ctx
.
request
.
query
;
const
queryParams
=
ctx
.
request
.
query
;
const
ret
=
await
ctx
.
service
.
course
.
v
4
.
institution
.
getClassList
(
queryParams
);
const
ret
=
await
ctx
.
service
.
course
.
v
5
.
institution
.
getClassList
(
queryParams
);
ctx
.
success
(
ret
);
ctx
.
success
(
ret
);
}
}
...
@@ -21,7 +21,7 @@ class InstitutionController extends Controller {
...
@@ -21,7 +21,7 @@ class InstitutionController extends Controller {
if
(
!
class_id
)
{
if
(
!
class_id
)
{
ctx
.
failed
(
'error class_id'
);
ctx
.
failed
(
'error class_id'
);
}
}
const
ret
=
await
ctx
.
service
.
course
.
v
4
.
institution
.
getClassInfo
(
class_id
);
const
ret
=
await
ctx
.
service
.
course
.
v
5
.
institution
.
getClassInfo
(
class_id
);
ctx
.
success
(
ret
);
ctx
.
success
(
ret
);
}
}
...
...
app/extend/context.js
View file @
3d38437b
...
@@ -18,11 +18,7 @@ const OPENID = Symbol('Context#openId');
...
@@ -18,11 +18,7 @@ const OPENID = Symbol('Context#openId');
module
.
exports
=
{
module
.
exports
=
{
failed
(
message
)
{
failed
(
message
)
{
const
method
=
this
.
request
.
method
.
toLowerCase
();
const
method
=
this
.
request
.
method
.
toLowerCase
();
if
(
method
===
'post'
)
{
this
.
throw
(
422
,
message
);
this
.
throw
(
422
,
message
);
}
else
{
this
.
throw
(
400
,
message
);
}
},
},
success
(
data
=
false
)
{
success
(
data
=
false
)
{
const
method
=
this
.
request
.
method
.
toLowerCase
();
const
method
=
this
.
request
.
method
.
toLowerCase
();
...
@@ -30,13 +26,13 @@ module.exports = {
...
@@ -30,13 +26,13 @@ module.exports = {
this
.
status
=
200
;
this
.
status
=
200
;
this
.
body
=
data
||
{};
this
.
body
=
data
||
{};
}
else
if
(
method
===
'post'
)
{
}
else
if
(
method
===
'post'
)
{
this
.
status
=
20
1
;
this
.
status
=
20
0
;
this
.
body
=
data
||
{};
this
.
body
=
data
||
{};
}
else
if
(
method
===
'put'
||
method
===
'delete'
)
{
}
else
if
(
method
===
'put'
||
method
===
'delete'
)
{
this
.
status
=
data
?
200
:
204
;
this
.
status
=
200
;
this
.
body
=
data
?
data
:
''
;
this
.
body
=
data
?
data
:
''
;
}
else
{
}
else
{
this
.
status
=
20
4
;
this
.
status
=
20
0
;
this
.
body
=
''
;
this
.
body
=
''
;
}
}
},
},
...
...
app/extend/helper.js
View file @
3d38437b
...
@@ -18,15 +18,12 @@ module.exports = {
...
@@ -18,15 +18,12 @@ module.exports = {
async
verify_token
(
ctx
)
{
async
verify_token
(
ctx
)
{
const
token
=
this
.
get_jwt
(
ctx
);
const
token
=
this
.
get_jwt
(
ctx
);
const
decode_res
=
await
ctx
.
service
.
jwt
.
decode_token
(
token
);
const
decode_res
=
await
ctx
.
service
.
jwt
.
decode_token
(
token
);
ctx
.
logger
.
info
(
'decode_res'
,
decode_res
);
const
token_black
=
await
this
.
app
.
memcache
.
get
(
'auth_token_'
+
decode_res
.
data
.
user_uuid
);
const
token_black
=
await
this
.
app
.
memcache
.
get
(
'auth_token_'
+
decode_res
.
data
.
user_id
);
ctx
.
logger
.
info
(
'token_black'
,
token_black
,
token
);
if
(
token_black
==
token
)
{
if
(
token_black
==
token
)
{
ctx
.
failed
(
'token 已失效
'
);
this
.
throw
(
422
,
'jwt校验失败
'
);
}
}
// if (ctx.request.body.user_id != decode_res.data.user_id) {
ctx
.
setUserUuid
(
decode_res
.
data
.
user_uuid
);
// ctx.failed('用户 ID 与 Token 不一致');
ctx
.
setOpenId
(
decode_res
.
data
.
openid
);
// }
return
decode_res
;
return
decode_res
;
},
},
...
...
app/router/course_v5.js
View file @
3d38437b
...
@@ -2,18 +2,19 @@
...
@@ -2,18 +2,19 @@
module
.
exports
=
app
=>
{
module
.
exports
=
app
=>
{
const
router
=
app
.
router
.
namespace
(
app
.
config
.
projectRootPath
+
'/course/v5'
);
const
router
=
app
.
router
.
namespace
(
app
.
config
.
projectRootPath
+
'/course/v5'
);
const
miniAuth
=
app
.
middleware
.
miniAuthV5
();
// 因为不跟现有的用户中心系统,所以使用单独的登录中间件
// const miniAuth = app.middleware.miniAuthV5();// 因为不跟现有的用户中心系统,所以使用单独的登录中间件
const
auth
=
app
.
middleware
.
verifyAuth
();
router
.
post
(
'third'
,
'/verification_code'
,
'course.v5.user.sendVerificationCode'
);
// 发送验证码
router
.
post
(
'third'
,
'/verification_code'
,
'course.v5.user.sendVerificationCode'
);
// 发送验证码
router
.
post
(
'third'
,
'/login/phone'
,
'course.v5.user.loginByPhone'
);
// 手机号登录
router
.
post
(
'third'
,
'/login/phone'
,
'course.v5.user.loginByPhone'
);
// 手机号登录
router
.
post
(
'third'
,
'/login/wechat'
,
'course.v5.user.loginByWX'
);
// 微信登录
router
.
post
(
'third'
,
'/login/wechat'
,
'course.v5.user.loginByWX'
);
// 微信登录
router
.
post
(
'third'
,
'/user/register_user'
,
miniA
uth
,
'course.v5.user.registerUserInfo'
);
// 授权后注册用户
router
.
post
(
'third'
,
'/user/register_user'
,
a
uth
,
'course.v5.user.registerUserInfo'
);
// 授权后注册用户
router
.
get
(
'third'
,
'/user/info'
,
miniA
uth
,
'course.v5.user.getUserInfo'
);
// 获取用户信息
router
.
get
(
'third'
,
'/user/info'
,
a
uth
,
'course.v5.user.getUserInfo'
);
// 获取用户信息
router
.
get
(
'third'
,
'/category/all'
,
'course.v5.option.getCategoryList'
);
// 获取分类列表
router
.
get
(
'third'
,
'/category/all'
,
'course.v5.option.getCategoryList'
);
// 获取分类列表
router
.
get
(
'third'
,
'/banner/all'
,
'course.v5.option.getBannerList'
);
// 获取banner列表
router
.
get
(
'third'
,
'/banner/all'
,
'course.v5.option.getBannerList'
);
// 获取banner列表
router
.
get
(
'third'
,
'/class/all'
,
'course.v5.institution.getClassList'
);
// 获取课程列表
router
.
get
(
'third'
,
'/class/all'
,
auth
,
'course.v5.institution.getClassList'
);
// 获取课程列表
router
.
get
(
'third'
,
'/class/:class_id'
,
'course.v5.institution.getClassInfo'
);
// 获取课程详情
router
.
get
(
'third'
,
'/class/:class_id'
,
auth
,
'course.v5.institution.getClassInfo'
);
// 获取课程详情
};
};
app/service/course/v5/institution.js
View file @
3d38437b
...
@@ -20,14 +20,16 @@ class InstitutionSubService extends Service {
...
@@ -20,14 +20,16 @@ class InstitutionSubService extends Service {
let
flag
=
false
;
let
flag
=
false
;
// 年龄筛选
// 年龄筛选
if
(
!
ctx
.
isEmpty
(
input
.
age
))
{
if
(
!
ctx
.
isEmpty
(
input
.
age
))
{
const
filterByAge
=
await
ctx
.
classModel
.
CourseV5ClassToAge
.
findAll
({
where
:
{
age_id
:
input
.
age
,
status
:
1
,
is_deleted
:
0
},
attributes
:
[
'class_id'
]
});
const
filterByAge
=
await
ctx
.
classModel
.
V5
.
CourseV5ClassToAge
.
findAll
({
where
:
{
age_id
:
input
.
age
,
status
:
1
,
is_deleted
:
0
},
attributes
:
[
'class_id'
]
});
filterIds
=
R
.
pluck
(
'class_id'
,
filterByAge
);
filterIds
=
R
.
pluck
(
'class_id'
,
filterByAge
);
console
.
log
(
filterIds
);
flag
=
true
;
flag
=
true
;
}
}
// 科目类型
// 科目类型
if
(
!
ctx
.
isEmpty
(
input
.
cat_id
))
{
if
(
!
ctx
.
isEmpty
(
input
.
cat_id
))
{
const
filterByCategory
=
await
ctx
.
classModel
.
CourseV5ClassToCat
.
findAll
({
where
:
{
cat_id
:
input
.
cate
_id
,
status
:
1
,
is_deleted
:
0
},
attributes
:
[
'class_id'
]
});
const
filterByCategory
=
await
ctx
.
classModel
.
V5
.
CourseV5ClassToCat
.
findAll
({
where
:
{
cat_id
:
input
.
cat
_id
,
status
:
1
,
is_deleted
:
0
},
attributes
:
[
'class_id'
]
});
filterIds
=
flag
?
_
.
intersection
(
filterIds
,
R
.
pluck
(
'class_id'
,
filterByCategory
))
:
R
.
pluck
(
'class_id'
,
filterByCategory
);
filterIds
=
flag
?
_
.
intersection
(
filterIds
,
R
.
pluck
(
'class_id'
,
filterByCategory
))
:
R
.
pluck
(
'class_id'
,
filterByCategory
);
console
.
log
(
filterIds
);
flag
=
true
;
flag
=
true
;
}
}
// 课程状态
// 课程状态
...
@@ -42,7 +44,7 @@ class InstitutionSubService extends Service {
...
@@ -42,7 +44,7 @@ class InstitutionSubService extends Service {
filter
.
where
.
id
=
{
$in
:
filterIds
};
filter
.
where
.
id
=
{
$in
:
filterIds
};
}
}
const
classList
=
await
ctx
.
classModel
.
CourseV5Class
.
findAndCountAll
(
filter
);
const
classList
=
await
ctx
.
classModel
.
V5
.
CourseV5Class
.
findAndCountAll
(
filter
);
// 用户收藏的课程
// 用户收藏的课程
const
userCollection
=
await
ctx
.
classModel
.
V5
.
CourseUserCollection
.
findAll
({
where
:
{
user_uuid
:
ctx
.
userUuid
,
is_deleted
:
0
,
type
:
3
},
raw
:
true
});
const
userCollection
=
await
ctx
.
classModel
.
V5
.
CourseUserCollection
.
findAll
({
where
:
{
user_uuid
:
ctx
.
userUuid
,
is_deleted
:
0
,
type
:
3
},
raw
:
true
});
...
@@ -76,21 +78,34 @@ class InstitutionSubService extends Service {
...
@@ -76,21 +78,34 @@ class InstitutionSubService extends Service {
// 额外字段
// 额外字段
const
classColumns
=
await
ctx
.
classModel
.
V5
.
CourseV5ClassToColumn
.
findAll
({
where
:
{
class_id
:
id
,
status
:
1
,
is_deleted
:
0
}
});
const
classColumns
=
await
ctx
.
classModel
.
V5
.
CourseV5ClassToColumn
.
findAll
({
where
:
{
class_id
:
id
,
status
:
1
,
is_deleted
:
0
}
});
let
columnList
=
await
ctx
.
classModel
.
V5
.
CourseV5Column
.
findAll
({
where
:
{
id
:
{
$in
:
R
.
pluck
(
'column_id'
,
classColumns
)
},
status
:
1
,
is_deleted
:
0
},
attributes
:
[
'
name'
]
});
let
columnList
=
await
ctx
.
classModel
.
V5
.
CourseV5Column
.
findAll
({
where
:
{
id
:
{
$in
:
R
.
pluck
(
'column_id'
,
classColumns
)
},
status
:
1
,
is_deleted
:
0
},
attributes
:
[
'
id'
,
'name'
],
raw
:
true
});
columnList
=
_
.
groupBy
(
columnList
,
'id'
);
columnList
=
_
.
groupBy
(
columnList
,
'id'
);
for
(
const
i
in
columnList
)
{
columnList
[
i
][
0
].
value
=
[];
}
// 机构数据
const
institution
=
await
ctx
.
classModel
.
V5
.
CourseV5Institution
.
findOne
({
where
:
{
id
:
classInfo
.
institution_id
}
});
const
columns
=
[];
const
columns
=
[];
for
(
const
v
of
classColumns
)
{
for
(
const
v
of
classColumns
)
{
if
(
!
ctx
.
isEmpty
(
columnList
[
v
.
column_id
]))
{
if
(
!
ctx
.
isEmpty
(
columnList
[
v
.
column_id
]))
{
columns
.
push
({
columnList
[
v
.
column_id
][
0
].
value
.
push
({
id
:
v
.
column_id
,
id
:
v
.
id
,
key
:
columnList
[
v
.
column_id
][
0
].
name
,
value
:
v
.
value
,
value
:
v
.
value
,
});
});
}
}
}
}
for
(
const
i
in
columnList
)
{
if
(
columnList
[
i
][
0
].
value
.
length
>
0
)
{
columns
.
push
(
columnList
[
i
][
0
]);
}
}
classInfo
.
columns
=
columns
;
classInfo
.
columns
=
columns
;
classInfo
.
institution_name
=
ctx
.
isEmpty
(
institution
)
?
''
:
institution
.
name
;
classInfo
.
institution_description
=
ctx
.
isEmpty
(
institution
)
?
''
:
institution
.
description
;
return
classInfo
;
return
classInfo
;
}
}
...
...
app/service/course/v5/user.js
View file @
3d38437b
...
@@ -44,7 +44,7 @@ class UserService extends Service {
...
@@ -44,7 +44,7 @@ class UserService extends Service {
phone
,
phone
,
};
};
await
ctx
.
app
.
memcache
.
set
(
key
,
value
);
await
ctx
.
app
.
memcache
.
set
(
key
,
value
);
const
authToken
=
ctx
.
helper
.
md5
(
userInfo
.
uuid
+
userInfo
.
openid
+
userInfo
.
phone
+
'jbwl'
);
const
authToken
=
await
this
.
service
.
jwt
.
apply
({
user_uuid
:
userInfo
.
uuid
,
openid
:
userInfo
.
openid
}
);
const
ret
=
{
const
ret
=
{
user_uuid
:
userInfo
.
uuid
,
user_uuid
:
userInfo
.
uuid
,
...
@@ -86,7 +86,7 @@ class UserService extends Service {
...
@@ -86,7 +86,7 @@ class UserService extends Service {
phone
:
userInfo
.
phone
,
phone
:
userInfo
.
phone
,
};
};
await
app
.
memcache
.
set
(
key
,
value
);
await
app
.
memcache
.
set
(
key
,
value
);
const
authToken
=
ctx
.
helper
.
md5
(
userInfo
.
uuid
+
openid
+
userInfo
.
phone
+
'jbwl'
);
const
authToken
=
await
this
.
service
.
jwt
.
apply
({
user_uuid
:
userInfo
.
uuid
,
openid
:
userInfo
.
openid
}
);
const
ret
=
{
const
ret
=
{
user_uuid
:
userInfo
.
uuid
,
user_uuid
:
userInfo
.
uuid
,
...
@@ -175,7 +175,7 @@ class UserService extends Service {
...
@@ -175,7 +175,7 @@ class UserService extends Service {
phone
:
data
.
phone
,
phone
:
data
.
phone
,
};
};
await
app
.
memcache
.
set
(
key
,
value
);
await
app
.
memcache
.
set
(
key
,
value
);
const
authToken
=
ctx
.
helper
.
md5
(
data
.
uuid
+
user
.
openid
+
data
.
phone
+
'jbwl'
);
const
authToken
=
await
this
.
service
.
jwt
.
apply
({
user_uuid
:
data
.
uuid
,
openid
:
user
.
openid
}
);
const
ret
=
{
const
ret
=
{
user_uuid
:
data
.
uuid
,
user_uuid
:
data
.
uuid
,
...
...
app/service/jwt.js
0 → 100644
View file @
3d38437b
'use strict'
;
const
Service
=
require
(
'egg'
).
Service
;
class
JWTService
extends
Service
{
async
apply
(
data
)
{
const
{
ctx
}
=
this
;
const
exp
=
ctx
.
app
.
config
.
jwt
.
exp
;
const
secret
=
ctx
.
app
.
config
.
jwt
.
secret
;
const
auth_token
=
ctx
.
app
.
jwt
.
sign
(
{
data
,
exp
,
},
secret
);
return
auth_token
;
}
async
decode_token
(
token
)
{
const
{
ctx
}
=
this
;
return
ctx
.
app
.
jwt
.
decode
(
token
,
ctx
.
app
.
config
.
jwt
.
secret
);
}
async
del_token
(
token
)
{
const
user_id
=
this
.
decode_token
(
token
).
data
.
user_id
;
await
this
.
app
.
memcache
.
set
(
'auth_token_'
+
user_id
,
token
,
this
.
ctx
.
app
.
config
.
jwt
.
exp
);
return
true
;
}
}
module
.
exports
=
JWTService
;
config/config.local.js
View file @
3d38437b
...
@@ -17,6 +17,13 @@ module.exports = appInfo => {
...
@@ -17,6 +17,13 @@ module.exports = appInfo => {
domainWhiteList
:
[],
domainWhiteList
:
[],
};
};
config
.
jwt
=
{
secret
:
'51business'
,
exp
:
Math
.
floor
(
Date
.
now
()
/
1000
)
+
60
*
60
*
24
*
30
,
enable
:
false
,
// default is false
ignore
:
[],
};
config
.
middleware
=
[
'errorHandler'
,
'deviceLogin'
,
'deviceInit'
,
'responseSet'
];
config
.
middleware
=
[
'errorHandler'
,
'deviceLogin'
,
'deviceInit'
,
'responseSet'
];
// config.middleware = [];
// config.middleware = [];
...
...
config/config.prod.js
View file @
3d38437b
...
@@ -24,6 +24,13 @@ module.exports = appInfo => {
...
@@ -24,6 +24,13 @@ module.exports = appInfo => {
domainWhiteList
:
[],
domainWhiteList
:
[],
};
};
config
.
jwt
=
{
secret
:
'51business'
,
exp
:
Math
.
floor
(
Date
.
now
()
/
1000
)
+
60
*
60
*
24
*
30
,
enable
:
false
,
// default is false
ignore
:
[],
};
config
.
sequelize
=
{
config
.
sequelize
=
{
datasources
:
[
datasources
:
[
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment