作者 yangfu

auth

... ... @@ -17,4 +17,6 @@
*.idea
*.tmp
\ No newline at end of file
*.tmp
*.sum
\ No newline at end of file
... ...
... ... @@ -9,6 +9,6 @@ ADD go.mod .
ADD go.sum .
RUN go mod download
RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o examples_gocomm main.go
RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o ability main.go
CMD ["/ability"]
\ No newline at end of file
... ...
... ... @@ -13,6 +13,7 @@ type AuthController struct {
controllers.BaseController
}
//Login
func(this *AuthController)Login(){
var msg *mybeego.Message
defer func(){
... ... @@ -30,3 +31,79 @@ func(this *AuthController)Login(){
}
msg = this.GenMessage(auth.Login(request))
}
//SmsCode
func(this *AuthController)SmsCode(){
var msg *mybeego.Message
defer func(){
this.Resp(msg)
}()
var request *protocol.SmsCodeRequest
if err:=json.Unmarshal(this.ByteBody,&request);err!=nil{
log.Error(err)
msg = mybeego.NewMessage(1)
return
}
if b,m :=this.Valid(request);!b{
msg = m
return
}
msg = this.GenMessage(auth.SmsCode(request))
}
//UpdateDevice
func(this *AuthController)UpdateDevice(){
var msg *mybeego.Message
defer func(){
this.Resp(msg)
}()
var request *protocol.UpdateDeviceRequest
if err:=json.Unmarshal(this.ByteBody,&request);err!=nil{
log.Error(err)
msg = mybeego.NewMessage(1)
return
}
if b,m :=this.Valid(request);!b{
msg = m
return
}
msg = this.GenMessage(auth.UpdateDevice(request))
}
//AccessToken
func(this *AuthController)AccessToken(){
var msg *mybeego.Message
defer func(){
this.Resp(msg)
}()
var request *protocol.AccessTokenRequest
if err:=json.Unmarshal(this.ByteBody,&request);err!=nil{
log.Error(err)
msg = mybeego.NewMessage(1)
return
}
if b,m :=this.Valid(request);!b{
msg = m
return
}
msg = this.GenMessage(auth.AccessToken(request))
}
//RefreshToken
func(this *AuthController)RefreshToken(){
var msg *mybeego.Message
defer func(){
this.Resp(msg)
}()
var request *protocol.RefreshTokenRequest
if err:=json.Unmarshal(this.ByteBody,&request);err!=nil{
log.Error(err)
msg = mybeego.NewMessage(1)
return
}
if b,m :=this.Valid(request);!b{
msg = m
return
}
msg = this.GenMessage(auth.RefreshToken(request))
}
... ...
... ... @@ -11,7 +11,7 @@ import (
)
type UserInfo struct {
Id int `orm:"column(uid);pk" description:"用户ID"`
Id int64 `orm:"column(uid);pk" description:"用户ID"`
Uname string `orm:"column(uname);size(100)" description:"名称"`
Icon string `orm:"column(icon);size(128)" description:"头像"`
Width int `orm:"column(width)" description:"宽度"`
... ... @@ -73,7 +73,7 @@ func AddUserInfo(m *UserInfo) (id int64, err error) {
// GetUserInfoById retrieves UserInfo by Id. Returns error if
// Id doesn't exist
func GetUserInfoById(id int) (v *UserInfo, err error) {
func GetUserInfoById(id int64) (v *UserInfo, err error) {
o := orm.NewOrm()
v = &UserInfo{Id: id}
if err = o.Read(v); err == nil {
... ... @@ -177,7 +177,7 @@ func UpdateUserInfoById(m *UserInfo) (err error) {
// DeleteUserInfo deletes UserInfo by Id and returns error if
// the record to be deleted doesn't exist
func DeleteUserInfo(id int) (err error) {
func DeleteUserInfo(id int64) (err error) {
o := orm.NewOrm()
v := UserInfo{Id: id}
// ascertain id exists in the database
... ... @@ -198,3 +198,13 @@ func GetUserInfoByMobile(mobile string)(v *UserInfo, err error) {
}
return nil, err
}
func GetUserInfoByClientId(clintId string)(v *UserInfo, err error) {
o := orm.NewOrm()
sql :="select * from user_info where clientId=?"
if err = o.Raw(sql,clintId).QueryRow(&v); err == nil {
return v, nil
}
return nil, err
}
... ...
... ... @@ -5,6 +5,7 @@ const (
LoginSmdcode ="signInCaptcha"
)
/*Login */
type LoginRequest struct {
Phone string `json:"phone" valid:"Required;Mobile"`
Code string `json:"code"`
... ... @@ -12,8 +13,53 @@ type LoginRequest struct {
PassWord string `json:"password"`
ClientId string `json:"clientId" valid:"Required"`
}
type LoginResponse struct {
AuthCode string `json:"authCode"`
}
/*SmsCode*/
type SmsCodeRequest struct {
Phone string `json:"phone" valid:"Required;Mobile"`
}
type SmsCodeResponse struct {
}
/*UpdateDevice*/
type UpdateDeviceRequest struct {
ClientId string `json:"clientId" valid:"Required"`
DeviceToken string `json:"deviceToken"`
}
type UpdateDeviceResponse struct {
}
/*AccessToken */
type AccessTokenRequest struct {
ClientId string `json:"clientId" valid:"Required"`
ClientSecret string `json:"clientSecret" valid:"Required"`
AuthCode string `json:"authCode" valid:"Required"`
}
type AccessTokenResponse struct {
RefreshToken string `json:"refreshToken"`
AccessToken string `json:"accessToken"`
ExpiresIn int `json:"expiresIn"`
}
/*RefreshToken */
type RefreshTokenRequest struct {
ClientId string `json:"clientId" valid:"Required"`
ClientSecret string `json:"clientSecret" valid:"Required"`
RefreshToken string `json:"refreshToken" valid:"Required"`
}
type RefreshTokenResponse struct {
RefreshToken string `json:"refreshToken"`
AccessToken string `json:"accessToken"`
ExpiresIn int `json:"expiresIn"`
}
type Access struct {
Uid int64
Type string
AccessToken string
RefreshToken string
}
... ...
... ... @@ -19,6 +19,8 @@ func init() {
{
auth :=&v1.AuthController{}
nsV1.Router("/auth/login",auth,"post:Login")
nsV1.Router("/auth/accessToken",auth,"post:AccessToken")
nsV1.Router("/auth/refreshToken",auth,"post:RefreshToken")
}
beego.AddNamespace(nsV1)
}
... ...
... ... @@ -4,8 +4,8 @@ import (
"fmt"
"gitlab.fjmaimaimai.com/mmm-go/ability/models"
"gitlab.fjmaimaimai.com/mmm-go/ability/protocol"
"gitlab.fjmaimaimai.com/mmm-go/gocomm/common"
"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log"
"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego"
"strings"
)
... ... @@ -39,9 +39,66 @@ func Login(request *protocol.LoginRequest)(rsp *protocol.LoginResponse,err error
return
}
rsp =&protocol.LoginResponse{AuthCode:userInfo.Auth}
msg :=mybeego.NewMessage(0)
msg.Data =rsp
return
}
return
}
func SmsCode(request *protocol.SmsCodeRequest)(rsp *protocol.SmsCodeResponse,err error){
return nil,nil
}
func UpdateDevice(request *protocol.UpdateDeviceRequest)(rsp *protocol.UpdateDeviceResponse,err error){
return nil,nil
}
func AccessToken(request *protocol.AccessTokenRequest)(rsp *protocol.AccessTokenResponse,err error){
var (
userInfo *models.UserInfo
)
userInfo,err = models.GetUserInfoByClientId(request.ClientId)
if err!=nil{
return
}
if strings.Compare(userInfo.Auth,request.AuthCode)!=0{
err = common.NewErrorWithMsg(2,"auth code error.")
return
}
//valid token
rsp = &protocol.AccessTokenResponse{
RefreshToken:userInfo.RefreshToken,
AccessToken:userInfo.AccessToken,
ExpiresIn:3600,
}
return
}
func RefreshToken(request *protocol.RefreshTokenRequest)(rsp *protocol.RefreshTokenResponse,err error){
var (
userInfo *models.UserInfo
newAccess *protocol.Access
)
userInfo,err = models.GetUserInfoByClientId(request.ClientId)
if err!=nil{
return
}
if strings.Compare(userInfo.RefreshToken,request.RefreshToken)!=0{
err = common.NewErrorWithMsg(2,"refresh token error.")
return
}
if newAccess,err =refreshToken(userInfo.Id,"");err!=nil{
return
}
rsp = &protocol.RefreshTokenResponse{
AccessToken:newAccess.AccessToken,
RefreshToken:newAccess.RefreshToken,
ExpiresIn:3600,
}
return
}
//loginType mobile im
func refreshToken(uid int64,loginType string)(rsp *protocol.Access,err error){
return nil,nil
}
\ No newline at end of file
... ...