Commit 563acaf72e78686be3aeac31069439365896a141

Authored by zhangqijia
1 parent f7f4beb5

在拦截器中认证jwt

actions/accountaction.go
@@ -9,40 +9,33 @@ import ( @@ -9,40 +9,33 @@ import (
9 "pro2d/utils" 9 "pro2d/utils"
10 ) 10 )
11 11
12 -func (s *AccountServer) RegisterHandler(ctx context.Context, in *pb.Register) (*pb.PubRsp, error) { 12 +func (s *LoginServer) RegisterHandler(ctx context.Context, in *pb.Register) (*pb.RegisterRsp, error) {
13 ok, account := models.AccountExistByPhone(in.Phone) 13 ok, account := models.AccountExistByPhone(in.Phone)
14 if !ok { 14 if !ok {
15 account.Phone = in.Phone 15 account.Phone = in.Phone
16 account.Password = utils.Md5V(in.Password) 16 account.Password = utils.Md5V(in.Password)
17 account.Uid = conf.SnowFlack.NextValStr() 17 account.Uid = conf.SnowFlack.NextValStr()
18 - account.Device = "123123"  
19 account.Create() 18 account.Create()
20 }else { 19 }else {
21 return nil, fmt.Errorf("1") 20 return nil, fmt.Errorf("1")
22 } 21 }
23 22
24 - return &pb.PubRsp{ 23 + return &pb.RegisterRsp{
25 Code: 0, 24 Code: 0,
26 }, nil 25 }, nil
27 } 26 }
28 27
29 -func (s *AccountServer) CreateTokenHandler(ctx context.Context, in *pb.AccountInfo) (*pb.CreateTokenRsp, error) { 28 +func (s *LoginServer) CreateTokenHandler(ctx context.Context, in *pb.Account) (*pb.CreateTokenRsp, error) {
30 m := models.NewAccount(in.Phone) 29 m := models.NewAccount(in.Phone)
31 if err := m.Load(); err != nil { 30 if err := m.Load(); err != nil {
32 return &pb.CreateTokenRsp{ 31 return &pb.CreateTokenRsp{
33 - Rsp: &pb.PubRsp{  
34 - Code: 1,  
35 - Msg: err.Error(),  
36 - }, 32 + Code: 1,
37 }, nil 33 }, nil
38 } 34 }
39 35
40 if m.Password != utils.Md5V(in.Password) { 36 if m.Password != utils.Md5V(in.Password) {
41 return &pb.CreateTokenRsp{ 37 return &pb.CreateTokenRsp{
42 - Rsp: &pb.PubRsp{  
43 - Code: 2,  
44 - Msg: "password error",  
45 - }, 38 + Code: 2,
46 }, nil 39 }, nil
47 } 40 }
48 41
@@ -57,10 +50,9 @@ func (s *AccountServer) CreateTokenHandler(ctx context.Context, in *pb.AccountIn @@ -57,10 +50,9 @@ func (s *AccountServer) CreateTokenHandler(ctx context.Context, in *pb.AccountIn
57 } 50 }
58 51
59 return &pb.CreateTokenRsp{ 52 return &pb.CreateTokenRsp{
60 - Rsp: &pb.PubRsp{  
61 - Code: 0,  
62 - },  
63 - Token: utils.CreateToken(m.AccountInfo), 53 + Code: 0,
  54 + Uid: m.Uid,
  55 + Token: utils.CreateToken(m.Account),
64 GameService: gameInfo, 56 GameService: gameInfo,
65 }, nil 57 }, nil
66 } 58 }
actions/roleaction.go
@@ -3,85 +3,50 @@ package actions @@ -3,85 +3,50 @@ package actions
3 import ( 3 import (
4 "context" 4 "context"
5 "errors" 5 "errors"
6 - "fmt"  
7 "google.golang.org/grpc/metadata" 6 "google.golang.org/grpc/metadata"
  7 + "google.golang.org/protobuf/types/known/emptypb"
8 "pro2d/conf" 8 "pro2d/conf"
9 "pro2d/models" 9 "pro2d/models"
10 "pro2d/protos/pb" 10 "pro2d/protos/pb"
11 "pro2d/utils" 11 "pro2d/utils"
12 ) 12 )
13 13
14 -func (s *GameServer) HeartBeatHandler(ctx context.Context, in *pb.Token) (*pb.PubRsp, error) { 14 +func (s *GameServer) HeartBeatHandler(ctx context.Context, empty *emptypb.Empty) (*pb.HeartRsp, error) {
15 utils.Sugar.Debugf("HeartBeatHandler被调用!!!") 15 utils.Sugar.Debugf("HeartBeatHandler被调用!!!")
16 //获取元数据信息 16 //获取元数据信息
17 - md,ok := metadata.FromIncomingContext(ctx) 17 + _,ok := metadata.FromIncomingContext(ctx)
18 if !ok { 18 if !ok {
19 return nil,errors.New("未传输token") 19 return nil,errors.New("未传输token")
20 } 20 }
21 - var (  
22 - appId string  
23 - appKey string  
24 - )  
25 - if val, ok := md["appId"]; ok {  
26 - appId = val[0]  
27 - }  
28 - if val, ok := md["appKey"]; ok {  
29 - appKey = val[0]  
30 - }  
31 - //进行校验的信息是否正确  
32 - if appId != "123" || appKey != "456" {  
33 - return nil, errors.New("token传输不正确")  
34 - }  
35 21
36 - return &pb.PubRsp{ 22 + return &pb.HeartRsp{
37 Code: 0, 23 Code: 0,
38 - Msg: "heart beat successful",  
39 }, nil 24 }, nil
40 } 25 }
41 26
42 -func (s *GameServer) CreateRoleHandler(ctx context.Context, in *pb.Token) (*pb.RoleRsp, error) {  
43 - account := utils.ParseToken(in.Token)  
44 - if account == nil {  
45 - return nil, fmt.Errorf("1")  
46 - }  
47 - ok, role := models.RoleExistByUid(account.Uid) 27 +func (s *GameServer) CreateRoleHandler(ctx context.Context, in *pb.LoginReq) (*pb.RoleRsp, error) {
  28 + ok, role := models.RoleExistByUid(in.Uid)
48 if !ok { 29 if !ok {
49 role = models.NewRole(conf.SnowFlack.NextVal()) 30 role = models.NewRole(conf.SnowFlack.NextVal())
50 - role.Role.Device = account.Device  
51 - role.Role.Uid = account.Uid 31 + role.Role.Device = in.Device
  32 + role.Role.Uid = in.Uid
52 role.Create() 33 role.Create()
53 -  
54 } 34 }
55 return &pb.RoleRsp{ 35 return &pb.RoleRsp{
56 - Rsp: &pb.PubRsp{  
57 - Code: 0,  
58 - Msg: "successful",  
59 - }, 36 + Code: 0,
60 Role: role.Role, 37 Role: role.Role,
61 }, nil 38 }, nil
62 } 39 }
63 40
64 -func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRsp, error) {  
65 - account := utils.ParseToken(in.Token)  
66 - if account == nil {  
67 - return nil, fmt.Errorf("token is error")  
68 - }  
69 - utils.Sugar.Debugf("login account: %v", account)  
70 - ok, role := models.RoleExistByUid(account.Uid) 41 +func (s *GameServer) LoginHandler(ctx context.Context, in *pb.LoginReq) (*pb.RoleRsp, error) {
  42 + ok, role := models.RoleExistByUid(in.Uid)
71 if !ok { 43 if !ok {
72 return &pb.RoleRsp{ 44 return &pb.RoleRsp{
73 - Rsp: &pb.PubRsp{  
74 - Code: 1,  
75 - Msg: "role not exist",  
76 - },  
77 - 45 + Code: 1,
78 }, nil 46 }, nil
79 } 47 }
80 return &pb.RoleRsp{ 48 return &pb.RoleRsp{
81 - Rsp: &pb.PubRsp{  
82 - Code: 0,  
83 - Msg: "successful",  
84 - }, 49 + Code: 0,
85 Role: role.Role, 50 Role: role.Role,
86 Hero: models.GetHeros(role.Heros), 51 Hero: models.GetHeros(role.Heros),
87 }, nil 52 }, nil
@@ -2,6 +2,7 @@ package actions @@ -2,6 +2,7 @@ package actions
2 2
3 import ( 3 import (
4 "context" 4 "context"
  5 + "fmt"
5 "google.golang.org/grpc" 6 "google.golang.org/grpc"
6 "google.golang.org/grpc/reflection" 7 "google.golang.org/grpc/reflection"
7 "pro2d/conf" 8 "pro2d/conf"
@@ -10,13 +11,13 @@ import ( @@ -10,13 +11,13 @@ import (
10 "pro2d/utils" 11 "pro2d/utils"
11 ) 12 )
12 13
13 -type AccountServer struct{  
14 - pb.UnimplementedAccountServer 14 +type LoginServer struct{
  15 + pb.UnsafeLoginServer
15 *BasicServer 16 *BasicServer
16 } 17 }
17 18
18 -func NewAccountServer() *AccountServer {  
19 - return &AccountServer{ 19 +func NewAccountServer() *LoginServer {
  20 + return &LoginServer{
20 BasicServer: NewServer(), 21 BasicServer: NewServer(),
21 } 22 }
22 } 23 }
@@ -30,7 +31,7 @@ func AccountServerInterceptor(ctx context.Context, req interface{}, info *grpc.U @@ -30,7 +31,7 @@ func AccountServerInterceptor(ctx context.Context, req interface{}, info *grpc.U
30 return resp, err 31 return resp, err
31 } 32 }
32 33
33 -func (s *AccountServer)Start() error { 34 +func (s *LoginServer)Start() error {
34 lis, err := s.BasicServer.Start(conf.GlobalConf.AccountConf) 35 lis, err := s.BasicServer.Start(conf.GlobalConf.AccountConf)
35 if err != nil { 36 if err != nil {
36 return err 37 return err
@@ -41,17 +42,17 @@ func (s *AccountServer)Start() error { @@ -41,17 +42,17 @@ func (s *AccountServer)Start() error {
41 //new一个grpc 42 //new一个grpc
42 s.GrpcServer = grpc.NewServer(grpc.UnaryInterceptor(AccountServerInterceptor)) 43 s.GrpcServer = grpc.NewServer(grpc.UnaryInterceptor(AccountServerInterceptor))
43 44
44 - pb.RegisterAccountServer(s.GrpcServer, s) 45 + pb.RegisterLoginServer(s.GrpcServer, s)
45 reflection.Register(s.GrpcServer) //在给定的gRPC服务器上注册服务器反射服务 46 reflection.Register(s.GrpcServer) //在给定的gRPC服务器上注册服务器反射服务
46 47
47 // Serve方法在lis上接受传入连接,为每个连接创建一个ServerTransport和server的goroutine。 48 // Serve方法在lis上接受传入连接,为每个连接创建一个ServerTransport和server的goroutine。
48 // 该goroutine读取gRPC请求,然后调用已注册的处理程序来响应它们。 49 // 该goroutine读取gRPC请求,然后调用已注册的处理程序来响应它们。
49 - utils.Sugar.Debugf("Start AccountServer listening on %d", conf.GlobalConf.AccountConf.Port) 50 + utils.Sugar.Debugf("Start LoginServer listening on %d", conf.GlobalConf.AccountConf.Port)
50 51
51 return s.GrpcServer.Serve(lis) 52 return s.GrpcServer.Serve(lis)
52 } 53 }
53 54
54 -func (s *AccountServer)Stop() { 55 +func (s *LoginServer)Stop() {
55 s.BasicServer.Stop() 56 s.BasicServer.Stop()
56 } 57 }
57 58
@@ -69,7 +70,12 @@ func NewGameServer() *GameServer { @@ -69,7 +70,12 @@ func NewGameServer() *GameServer {
69 func GameServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, 70 func GameServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
70 handler grpc.UnaryHandler) (interface{}, error) { 71 handler grpc.UnaryHandler) (interface{}, error) {
71 72
72 - utils.Sugar.Debugf("gRPC method: %s, %v", info.FullMethod, req) 73 + //utils.Sugar.Debugf("gRPC method: %s, %v", info.FullMethod, req)
  74 + acc := utils.CheckAuth(ctx)
  75 + if acc == nil {
  76 + return nil, fmt.Errorf("token error")
  77 + }
  78 +
73 resp, err := handler(ctx, req) 79 resp, err := handler(ctx, req)
74 return resp, err 80 return resp, err
75 } 81 }
@@ -5,6 +5,7 @@ go 1.17 @@ -5,6 +5,7 @@ go 1.17
5 require ( 5 require (
6 github.com/dgrijalva/jwt-go v3.2.0+incompatible 6 github.com/dgrijalva/jwt-go v3.2.0+incompatible
7 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b 7 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
  8 + go.etcd.io/etcd/api/v3 v3.5.2
8 go.etcd.io/etcd/client/v3 v3.5.2 9 go.etcd.io/etcd/client/v3 v3.5.2
9 go.mongodb.org/mongo-driver v1.8.3 10 go.mongodb.org/mongo-driver v1.8.3
10 go.uber.org/zap v1.17.0 11 go.uber.org/zap v1.17.0
@@ -27,7 +28,6 @@ require ( @@ -27,7 +28,6 @@ require (
27 github.com/xdg-go/scram v1.0.2 // indirect 28 github.com/xdg-go/scram v1.0.2 // indirect
28 github.com/xdg-go/stringprep v1.0.2 // indirect 29 github.com/xdg-go/stringprep v1.0.2 // indirect
29 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect 30 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
30 - go.etcd.io/etcd/api/v3 v3.5.2 // indirect  
31 go.etcd.io/etcd/client/pkg/v3 v3.5.2 // indirect 31 go.etcd.io/etcd/client/pkg/v3 v3.5.2 // indirect
32 go.uber.org/atomic v1.7.0 // indirect 32 go.uber.org/atomic v1.7.0 // indirect
33 go.uber.org/multierr v1.6.0 // indirect 33 go.uber.org/multierr v1.6.0 // indirect
@@ -7,7 +7,7 @@ import ( @@ -7,7 +7,7 @@ import (
7 7
8 type AccountModel struct { 8 type AccountModel struct {
9 *db.MgoColl 9 *db.MgoColl
10 - *pb.AccountInfo 10 + *pb.Account
11 } 11 }
12 12
13 func AccountExistByPhone(phone string) (bool, *AccountModel){ 13 func AccountExistByPhone(phone string) (bool, *AccountModel){
@@ -19,12 +19,12 @@ func AccountExistByPhone(phone string) (bool, *AccountModel){ @@ -19,12 +19,12 @@ func AccountExistByPhone(phone string) (bool, *AccountModel){
19 } 19 }
20 20
21 func NewAccount(phone string) *AccountModel { 21 func NewAccount(phone string) *AccountModel {
22 - ac := &pb.AccountInfo{ 22 + ac := &pb.Account{
23 Phone: phone, 23 Phone: phone,
24 } 24 }
25 account := &AccountModel{ 25 account := &AccountModel{
26 MgoColl: db.NewMongoColl(phone, ac), 26 MgoColl: db.NewMongoColl(phone, ac),
27 - AccountInfo: ac, 27 + Account: ac,
28 } 28 }
29 29
30 return account 30 return account
@@ -24,7 +24,7 @@ func InitDoc(schema ...interface{}) { @@ -24,7 +24,7 @@ func InitDoc(schema ...interface{}) {
24 24
25 func InitAccountServerModels() { 25 func InitAccountServerModels() {
26 var schema []interface{} = []interface{}{ 26 var schema []interface{} = []interface{}{
27 - pb.AccountInfo{}, 27 + pb.Account{},
28 } 28 }
29 InitDoc(schema...) 29 InitDoc(schema...)
30 } 30 }
@@ -9,7 +9,7 @@ import ( @@ -9,7 +9,7 @@ import (
9 "pro2d/utils" 9 "pro2d/utils"
10 ) 10 )
11 11
12 -func Register(c pb.AccountClient, phone, password string) error { 12 +func Register(c pb.LoginClient, phone, password string) error {
13 r, err := c.RegisterHandler(context.Background(), &pb.Register{ 13 r, err := c.RegisterHandler(context.Background(), &pb.Register{
14 Phone: "17683852936", 14 Phone: "17683852936",
15 Password: "123456", 15 Password: "123456",
@@ -20,14 +20,17 @@ func Register(c pb.AccountClient, phone, password string) error { @@ -20,14 +20,17 @@ func Register(c pb.AccountClient, phone, password string) error {
20 return err 20 return err
21 } 21 }
22 if r.Code != 0 { 22 if r.Code != 0 {
23 - return fmt.Errorf("%s", r.Msg) 23 + return fmt.Errorf("register fail")
24 } 24 }
25 utils.Sugar.Debug("register success") 25 utils.Sugar.Debug("register success")
26 return nil 26 return nil
27 } 27 }
28 28
29 -func Login(loginUri, token string) {  
30 - gameConn, err := grpc.Dial(loginUri, grpc.WithInsecure() ) 29 +func Login(loginUri, token, uid string) {
  30 + var opts []grpc.DialOption
  31 + // 指定自定义认证
  32 + opts = append(opts, grpc.WithPerRPCCredentials(&utils.AuthToken{Token: token}), grpc.WithInsecure())
  33 + gameConn, err := grpc.Dial(loginUri, opts...)
31 if err != nil { 34 if err != nil {
32 utils.Sugar.Errorf("game conn err: %v", err) 35 utils.Sugar.Errorf("game conn err: %v", err)
33 return 36 return
@@ -36,8 +39,9 @@ func Login(loginUri, token string) { @@ -36,8 +39,9 @@ func Login(loginUri, token string) {
36 39
37 client:= pb.NewGameClient(gameConn) 40 client:= pb.NewGameClient(gameConn)
38 var role *pb.Role 41 var role *pb.Role
39 - loginRsp, err := client.LoginHandler(context.Background(), &pb.Token{  
40 - Token: token, 42 + loginRsp, err := client.LoginHandler(context.Background(), &pb.LoginReq{
  43 + Uid: uid,
  44 + Device: "111111",
41 }) 45 })
42 46
43 if err != nil { 47 if err != nil {
@@ -46,14 +50,14 @@ func Login(loginUri, token string) { @@ -46,14 +50,14 @@ func Login(loginUri, token string) {
46 } 50 }
47 role = loginRsp.Role 51 role = loginRsp.Role
48 52
49 - if loginRsp.Rsp.Code != 0 {  
50 - utils.Sugar.Debugf("login rsp: %v", loginRsp.Rsp.Msg)  
51 - createRole, err := client.CreateRoleHandler(context.Background(), &pb.Token{Token: token}) 53 + if loginRsp.Code != 0 {
  54 + utils.Sugar.Debugf("login fail, role not exist")
  55 + createRole, err := client.CreateRoleHandler(context.Background(), &pb.LoginReq{Uid: uid, Device: "11111"})
52 if err != nil { 56 if err != nil {
53 utils.Sugar.Errorf("create role err: %v", err) 57 utils.Sugar.Errorf("create role err: %v", err)
54 return 58 return
55 } 59 }
56 - utils.Sugar.Debug("create role rsp: ", createRole.Rsp.Code, createRole.Rsp.Msg) 60 + utils.Sugar.Debug("create role rsp: ", createRole.Code)
57 role = createRole.Role 61 role = createRole.Role
58 } 62 }
59 63
@@ -67,13 +71,13 @@ func main() { @@ -67,13 +71,13 @@ func main() {
67 return 71 return
68 } 72 }
69 defer conn.Close() 73 defer conn.Close()
70 - c := pb.NewAccountClient(conn)  
71 - //err = Register(c,"17683852936", "123456") 74 + c := pb.NewLoginClient(conn)
  75 + err = Register(c,"17683852936", "123456")
72 //if err != nil { 76 //if err != nil {
73 // utils.Sugar.Errorf("register err: %v", err) 77 // utils.Sugar.Errorf("register err: %v", err)
74 // return 78 // return
75 //} 79 //}
76 - rsp, err := c.CreateTokenHandler(context.Background(), &pb.AccountInfo{ 80 + rsp, err := c.CreateTokenHandler(context.Background(), &pb.Account{
77 Phone: "17683852936", 81 Phone: "17683852936",
78 Password: "123456", 82 Password: "123456",
79 }) 83 })
@@ -83,12 +87,12 @@ func main() { @@ -83,12 +87,12 @@ func main() {
83 return 87 return
84 } 88 }
85 89
86 - if rsp.Rsp.Code != 0 {  
87 - utils.Sugar.Errorf("createtoken err: %v", rsp.Rsp.Msg) 90 + if rsp.Code != 0 {
  91 + utils.Sugar.Errorf("createtoken err" )
88 return 92 return
89 } 93 }
90 94
91 if len(rsp.GameService) >0 { 95 if len(rsp.GameService) >0 {
92 - Login(rsp.GameService[0].Address, rsp.Token) 96 + Login(rsp.GameService[0].Address, rsp.Token, rsp.Uid)
93 } 97 }
94 } 98 }
@@ -10,7 +10,7 @@ import ( @@ -10,7 +10,7 @@ import (
10 "google.golang.org/grpc/metadata" 10 "google.golang.org/grpc/metadata"
11 ) 11 )
12 12
13 -func CreateToken(account *pb.AccountInfo) (tokenString string) { 13 +func CreateToken(account *pb.Account) (tokenString string) {
14 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ 14 token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
15 "iss": "pro2d-app-server", 15 "iss": "pro2d-app-server",
16 "aud": "pro2d-app-server", 16 "aud": "pro2d-app-server",
@@ -19,7 +19,6 @@ func CreateToken(account *pb.AccountInfo) (tokenString string) { @@ -19,7 +19,6 @@ func CreateToken(account *pb.AccountInfo) (tokenString string) {
19 "sub": "pro2d", 19 "sub": "pro2d",
20 "phone": account.Phone, 20 "phone": account.Phone,
21 "uid": account.Uid, 21 "uid": account.Uid,
22 - "device": account.Device,  
23 }) 22 })
24 tokenString, err := token.SignedString([]byte(Pro2DTokenSignedString)) 23 tokenString, err := token.SignedString([]byte(Pro2DTokenSignedString))
25 if err != nil { 24 if err != nil {
@@ -28,7 +27,7 @@ func CreateToken(account *pb.AccountInfo) (tokenString string) { @@ -28,7 +27,7 @@ func CreateToken(account *pb.AccountInfo) (tokenString string) {
28 return tokenString 27 return tokenString
29 } 28 }
30 29
31 -func ParseToken(tokenStr string)*pb.AccountInfo { 30 +func ParseToken(tokenStr string)*pb.Account{
32 var clientClaims Claims 31 var clientClaims Claims
33 token, err := jwt.ParseWithClaims(tokenStr, &clientClaims, func(token *jwt.Token) (interface{}, error) { 32 token, err := jwt.ParseWithClaims(tokenStr, &clientClaims, func(token *jwt.Token) (interface{}, error) {
34 if token.Header["alg"] != "HS256" { 33 if token.Header["alg"] != "HS256" {
@@ -47,23 +46,9 @@ func ParseToken(tokenStr string)*pb.AccountInfo { @@ -47,23 +46,9 @@ func ParseToken(tokenStr string)*pb.AccountInfo {
47 Sugar.Error("ErrInvalidToken") 46 Sugar.Error("ErrInvalidToken")
48 return nil 47 return nil
49 } 48 }
50 - return &clientClaims.AccountInfo 49 + return &clientClaims.Account
51 } 50 }
52 51
53 -// AuthToken 自定义认证  
54 -type AuthToken struct {  
55 - Token string  
56 -}  
57 -  
58 -func (c AuthToken) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {  
59 - return map[string]string{  
60 - "authorization": c.Token,  
61 - }, nil  
62 -}  
63 -  
64 -func (c AuthToken) RequireTransportSecurity() bool {  
65 - return false  
66 -}  
67 52
68 // Claims defines the struct containing the token claims. 53 // Claims defines the struct containing the token claims.
69 type Claims struct { 54 type Claims struct {
@@ -71,7 +56,7 @@ type Claims struct { @@ -71,7 +56,7 @@ type Claims struct {
71 //phone string `json:"phone"` 56 //phone string `json:"phone"`
72 //uid int64 `json:"uid"` 57 //uid int64 `json:"uid"`
73 //device string `json:"device"` 58 //device string `json:"device"`
74 - pb.AccountInfo 59 + pb.Account
75 } 60 }
76 61
77 // 从 context 的 metadata 中,取出 token 62 // 从 context 的 metadata 中,取出 token
@@ -89,10 +74,26 @@ func getTokenFromContext(ctx context.Context) (string, error) { @@ -89,10 +74,26 @@ func getTokenFromContext(ctx context.Context) (string, error) {
89 return token[0], nil 74 return token[0], nil
90 } 75 }
91 76
92 -func CheckAuth(ctx context.Context) *pb.AccountInfo { 77 +func CheckAuth(ctx context.Context) *pb.Account{
93 tokenStr, err := getTokenFromContext(ctx) 78 tokenStr, err := getTokenFromContext(ctx)
94 if err != nil { 79 if err != nil {
95 - panic("get token from context error") 80 + Sugar.Errorf("get token from context error")
  81 + return nil
96 } 82 }
97 return ParseToken(tokenStr) 83 return ParseToken(tokenStr)
  84 +}
  85 +
  86 +// AuthToken 自定义认证 客户端使用
  87 +type AuthToken struct {
  88 + Token string
  89 +}
  90 +
  91 +func (c AuthToken) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
  92 + return map[string]string{
  93 + "authorization": c.Token,
  94 + }, nil
  95 +}
  96 +
  97 +func (c AuthToken) RequireTransportSecurity() bool {
  98 + return false
98 } 99 }
99 \ No newline at end of file 100 \ No newline at end of file
@@ -7,11 +7,10 @@ import ( @@ -7,11 +7,10 @@ import (
7 ) 7 )
8 8
9 func TestCreateToken(t *testing.T) { 9 func TestCreateToken(t *testing.T) {
10 - account := &pb.AccountInfo{ 10 + account := &pb.Account{
11 Phone: "17683852936", 11 Phone: "17683852936",
12 Password: "123456", 12 Password: "123456",
13 - Uid: 12312,  
14 - Device: "12312312", 13 + Uid: "12312",
15 } 14 }
16 token := CreateToken(account) 15 token := CreateToken(account)
17 ac := ParseToken(token) 16 ac := ParseToken(token)