Add Properties to user.

This commit is contained in:
Yang Luo
2021-05-30 15:13:43 +08:00
parent badd75b894
commit dc89f2b0f6
5 changed files with 44 additions and 9 deletions

View File

@ -198,15 +198,27 @@ func (c *ApiController) Login() {
user := object.GetUser(userId)
// sync info from 3rd-party if possible
if user.DisplayName == "" && userInfo.Username != "" {
if userInfo.Username != "" {
propertyName := fmt.Sprintf("oauth_%s_username", provider.Type)
object.SetUserProperty(user, propertyName, userInfo.Username)
if user.DisplayName == "" {
object.SetUserField(user, "display_name", userInfo.Username)
}
if user.Avatar == "" && userInfo.AvatarUrl != "" {
}
if userInfo.AvatarUrl != "" {
propertyName := fmt.Sprintf("oauth_%s_avatarUrl", provider.Type)
object.SetUserProperty(user, propertyName, userInfo.AvatarUrl)
if user.Avatar == "" {
object.SetUserField(user, "avatar", userInfo.AvatarUrl)
}
if user.Email == "" && userInfo.Email != "" {
}
if userInfo.Email != "" {
propertyName := fmt.Sprintf("oauth_%s_email", provider.Type)
object.SetUserProperty(user, propertyName, userInfo.Email)
if user.Email == "" {
object.SetUserField(user, "email", userInfo.Email)
}
}
isLinked := object.LinkUserAccount(user, provider.Type, userInfo.Username)
if isLinked {

View File

@ -35,6 +35,7 @@ type User struct {
Phone string `xorm:"varchar(100)" json:"phone"`
Affiliation string `xorm:"varchar(100)" json:"affiliation"`
Tag string `xorm:"varchar(100)" json:"tag"`
Ranking int `json:"ranking"`
IsAdmin bool `json:"isAdmin"`
IsGlobalAdmin bool `json:"isGlobalAdmin"`
IsForbidden bool `json:"isForbidden"`
@ -45,6 +46,8 @@ type User struct {
Google string `xorm:"varchar(100)" json:"google"`
QQ string `xorm:"qq varchar(100)" json:"qq"`
WeChat string `xorm:"wechat varchar(100)" json:"wechat"`
Properties map[string]string `json:"properties"`
}
func GetGlobalUsers() []*User {

View File

@ -92,6 +92,21 @@ func GetUserField(user *User, field string) string {
return f.String()
}
func SetUserProperty(user *User, field string, value string) bool {
if value == "" {
delete(user.Properties, field)
} else {
user.Properties[field] = value
}
affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("properties").Update(user)
if err != nil {
panic(err)
}
return affected != 0
}
func calculateHash(user *User) string {
s := strings.Join([]string{user.Id, user.Password, user.DisplayName, user.Avatar, user.Phone}, "|")
return util.GetMd5Hash(s)

View File

@ -44,7 +44,7 @@ class UserListPage extends React.Component {
newUser() {
return {
owner: "admin", // this.props.account.username,
owner: "built-in", // this.props.account.username,
name: `user_${this.state.users.length}`,
createdTime: moment().format(),
type: "normal-user",
@ -58,6 +58,7 @@ class UserListPage extends React.Component {
isAdmin: false,
isGlobalAdmin: false,
IsForbidden: false,
properties: {},
}
}

View File

@ -68,18 +68,22 @@ class AuthCallback extends React.Component {
UNSAFE_componentWillMount() {
const params = new URLSearchParams(this.props.location.search);
const code = params.get("code");
const innerParams = this.getInnerParams();
const applicationName = innerParams.get("application");
const providerName = innerParams.get("provider");
const method = innerParams.get("method");
let redirectUri = `${window.location.origin}/callback`;
const body = {
type: this.getResponseType(),
application: applicationName,
provider: providerName,
code: params.get("code"),
code: code,
// state: innerParams.get("state"),
state: innerParams.get("application"),
state: applicationName,
redirectUri: redirectUri,
method: method,
};