mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 09:34:57 +08:00
Feat: User login
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user