MCPcopy Index your code
hub / github.com/TruthHun/BookStack / Add

Method Add

models/member.go:159–214  ·  view source on GitHub ↗

Add 添加一个用户.

()

Source from the content-addressed store, hash-verified

157
158// Add 添加一个用户.
159func (m *Member) Add() error {
160 o := orm.NewOrm()
161
162 if ok, err := regexp.MatchString(conf.RegexpAccount, m.Account); m.Account == "" || !ok || err != nil {
163 return errors.New("用户名只能由英文字母数字组成,且在3-50个字符")
164 }
165 if m.Email == "" {
166 return errors.New("邮箱不能为空")
167 }
168 if ok, err := regexp.MatchString(conf.RegexpEmail, m.Email); !ok || err != nil || m.Email == "" {
169 return errors.New("邮箱格式不正确")
170 }
171
172 if l := strings.Count(m.Password, ""); l < 7 || l >= 50 {
173 return errors.New("密码不能为空且必须在6-50个字符之间")
174 }
175
176 cond := orm.NewCondition().Or("email", m.Email).Or("nickname", m.Nickname).Or("account", m.Account)
177 var one Member
178 if o.QueryTable(m.TableNameWithPrefix()).SetCond(cond).One(&one, "member_id", "nickname", "account", "email"); one.MemberId > 0 {
179 if one.Nickname == m.Nickname {
180 return errors.New("昵称已存在,请更换昵称")
181 }
182 if one.Email == m.Email {
183 return errors.New("邮箱已被注册,请更换邮箱")
184 }
185 if one.Account == m.Account {
186 return errors.New("用户名已存在,请更换用户名")
187 }
188 }
189
190 // 这里必需设置为读者,避免采坑:普通用户注册的时候注册成了管理员...
191 if m.Account == "admin" {
192 m.Role = conf.MemberSuperRole
193 } else {
194 m.Role = conf.MemberGeneralRole
195 }
196
197 hash, err := utils.PasswordHash(m.Password)
198
199 if err != nil {
200 return err
201 }
202
203 m.Password = hash
204 if m.AuthMethod == "" {
205 m.AuthMethod = "local"
206 }
207 _, err = o.Insert(m)
208
209 if err != nil {
210 return err
211 }
212 m.ResolveRoleName()
213 return nil
214}
215
216// Update 更新用户信息.

Callers 5

BindMethod · 0.95
CreateMemberMethod · 0.95
LoginBindWechatMethod · 0.95
RegisterMethod · 0.95
ldapLoginMethod · 0.95

Calls 5

TableNameWithPrefixMethod · 0.95
ResolveRoleNameMethod · 0.95
PasswordHashFunction · 0.92
CountMethod · 0.45
InsertMethod · 0.45

Tested by

no test coverage detected