Feat: User login

This commit is contained in:
HFO4
2019-11-11 19:13:17 +08:00
parent 943c84320c
commit 6f96018223
14 changed files with 159 additions and 52 deletions

View File

@@ -122,7 +122,7 @@ Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; verti
}
func addDefaultUser() {
_, err := GetUser(1)
_, err := GetUserByID(1)
// 未找到初始用户时,则创建
if gorm.IsRecordNotFoundError(err) {

View File

@@ -15,6 +15,11 @@ type Setting struct {
// settingCache 设置项缓存
var settingCache = make(map[string]string)
// IsTrueVal 返回设置的值是否为真
func IsTrueVal(val string) bool {
return val == "1" || val == "true"
}
// GetSettingByName 用 Name 获取设置值
func GetSettingByName(name string) string {
var setting Setting

View File

@@ -24,29 +24,37 @@ const (
// User 用户模型
type User struct {
gorm.Model
Email string `gorm:"type:varchar(100);unique_index"`
Nick string `gorm:"size:50"`
Password string
Status int
Group int
PrimaryGroup int
ActivationKey string
Storage int64
LastNotify *time.Time
OpenID string
TwoFactor string
Delay int
Avatar string
Options string `gorm:"size:4096"`
Email string `gorm:"type:varchar(100);unique_index"`
Nick string `gorm:"size:50"`
Password string
Status int
Group int
PrimaryGroup int
ActivationKey string
Storage int64
LastNotify *time.Time
OpenID string
TwoFactor string
Delay int
Avatar string
Options string `gorm:"size:4096"`
OptionsSerialized serializer.UserOption `gorm:"-"`
}
// GetUser 用ID获取用户
func GetUser(ID interface{}) (User, error) {
// GetUserByID 用ID获取用户
func GetUserByID(ID interface{}) (User, error) {
var user User
result := DB.First(&user, ID)
return user, result.Error
}
// GetUserByEmail 用Email获取用户
func GetUserByEmail(email string) (User, error) {
var user User
result := DB.Where("email = ?", email).First(&user)
return user, result.Error
}
// NewUser 返回一个新的空 User
func NewUser() User {
options := serializer.UserOption{
@@ -59,6 +67,13 @@ func NewUser() User {
}
}
// AfterFind 找到用户后的钩子
func (user *User) AfterFind() (err error) {
// 解析用户设置到OptionsSerialized
err = json.Unmarshal([]byte(user.Options), &user.OptionsSerialized)
return err
}
// CheckPassword 根据明文校验密码
func (user *User) CheckPassword(password string) (bool, error) {

View File

@@ -1,6 +1,8 @@
package model
import (
"cloudreve/pkg/serializer"
"encoding/json"
"github.com/DATA-DOG/go-sqlmock"
"github.com/jinzhu/gorm"
"github.com/pkg/errors"
@@ -8,7 +10,7 @@ import (
"testing"
)
func TestGetUser(t *testing.T) {
func TestGetUserByID(t *testing.T) {
asserts := assert.New(t)
//找到用户时
@@ -17,7 +19,7 @@ func TestGetUser(t *testing.T) {
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(rows)
user, err := GetUser(1)
user, err := GetUserByID(1)
asserts.NoError(err)
asserts.Equal(User{
Model: gorm.Model{
@@ -29,7 +31,7 @@ func TestGetUser(t *testing.T) {
//未找到用户时
mock.ExpectQuery("^SELECT (.+)").WillReturnError(errors.New("not found"))
user, err = GetUser(1)
user, err = GetUserByID(1)
asserts.Error(err)
asserts.Equal(User{}, user)
}
@@ -73,3 +75,15 @@ func TestNewUser(t *testing.T) {
asserts.NotEmpty(newUser.Avatar)
asserts.NotEmpty(newUser.Options)
}
func TestUser_AfterFind(t *testing.T) {
asserts := assert.New(t)
newUser := NewUser()
err := newUser.AfterFind()
expected := serializer.UserOption{}
err = json.Unmarshal([]byte(newUser.Options), &expected)
asserts.NoError(err)
asserts.Equal(expected, newUser.OptionsSerialized)
}