@@ -2,12 +2,14 @@ package service
22
33import (
44 "errors"
5+ "time"
56
67 "github.com/gin-gonic/gin"
78 "github.com/nk-akun/NeighborBBS/logs"
89 "github.com/nk-akun/NeighborBBS/model"
910 "github.com/nk-akun/NeighborBBS/repository"
1011 "github.com/nk-akun/NeighborBBS/util"
12+ uuid "github.com/satori/go.uuid"
1113 "golang.org/x/crypto/bcrypt"
1214)
1315
@@ -21,6 +23,30 @@ func newUserService() *userService {
2123 return new (userService )
2224}
2325
26+ // GetCurrentUser ...
27+ func (s * userService ) GetCurrentUser (c * gin.Context ) * model.User {
28+ token := s .GetToken (c )
29+ userToken , err := repository .UserTokenRepository .GetUserIDByToken (util .DB (), token )
30+ if err != nil {
31+ logs .Logger .Errorf ("数据库查询token出错" )
32+ return nil
33+ }
34+ if userToken == nil || userToken .ExpiredAt < util .NowTimestamp () { // 不存在或者过期了
35+ return nil
36+ }
37+ user , err := repository .UserRepository .GetUserByUserID (util .DB (), userToken .UserID )
38+ if err != nil {
39+ logs .Logger .Errorf ("数据库查询user出错" )
40+ return nil
41+ }
42+ return user
43+ }
44+
45+ func (s * userService ) GetToken (c * gin.Context ) string {
46+ token := c .GetHeader ("X-User-Token" )
47+ return token
48+ }
49+
2450func (s * userService ) SignUp (c * gin.Context ) (* model.User , error ) {
2551 req := getReqFromContext (c ).(* model.RegisterRequest )
2652
@@ -80,7 +106,7 @@ func (s *userService) SignUp(c *gin.Context) (*model.User, error) {
80106 // })
81107}
82108
83- func (s * userService ) Login (c * gin.Context ) (* model.User , error ) {
109+ func (s * userService ) Login (c * gin.Context ) (user * model.User , err error ) {
84110 req := getReqFromContext (c ).(* model.LoginRequest )
85111 if req .Email == "" && req .Username == "" || req .Email != "" && req .Username != "" {
86112 return nil , errors .New ("请使用用户名或邮箱二者之一登录" )
@@ -89,7 +115,6 @@ func (s *userService) Login(c *gin.Context) (*model.User, error) {
89115 return s .loginByEmail (req .Email , req .Password )
90116 }
91117 return s .loginByUsername (req .Username , req .Password )
92-
93118}
94119
95120func (s * userService ) loginByEmail (email string , password string ) (* model.User , error ) {
@@ -113,3 +138,16 @@ func (s *userService) loginByUsername(username string, password string) (*model.
113138 }
114139 return user , nil
115140}
141+
142+ func (s * userService ) SetToken (userID int64 ) string {
143+ token := uuid .NewV4 ().String ()
144+ expireTime := time .Now ().Add (time .Hour * 24 * time .Duration (model .TokenExpireDays ))
145+ userToken := & model.UserToken {
146+ UserID : userID ,
147+ Token : token ,
148+ ExpiredAt : util .Timestamp (expireTime ),
149+ CreateTime : util .NowTimestamp (),
150+ }
151+ repository .UserTokenRepository .Create (util .DB (), userToken )
152+ return token
153+ }
0 commit comments