mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Support to last login feature
This commit is contained in:
		@@ -950,6 +950,8 @@ users.activated = Activated
 | 
				
			|||||||
users.admin = Admin
 | 
					users.admin = Admin
 | 
				
			||||||
users.repos = Repos
 | 
					users.repos = Repos
 | 
				
			||||||
users.created = Created
 | 
					users.created = Created
 | 
				
			||||||
 | 
					users.last_login = Last Login
 | 
				
			||||||
 | 
					users.never_login = Never Login
 | 
				
			||||||
users.send_register_notify = Send Registration Notification To User
 | 
					users.send_register_notify = Send Registration Notification To User
 | 
				
			||||||
users.new_success = New account '%s' has been created successfully.
 | 
					users.new_success = New account '%s' has been created successfully.
 | 
				
			||||||
users.edit = Edit
 | 
					users.edit = Edit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,6 +75,8 @@ type User struct {
 | 
				
			|||||||
	CreatedUnix int64
 | 
						CreatedUnix int64
 | 
				
			||||||
	Updated     time.Time `xorm:"-"`
 | 
						Updated     time.Time `xorm:"-"`
 | 
				
			||||||
	UpdatedUnix int64
 | 
						UpdatedUnix int64
 | 
				
			||||||
 | 
						LastLogin     time.Time `xorm:"-"`
 | 
				
			||||||
 | 
						LastLoginUnix int64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Remember visibility choice for convenience, true for private
 | 
						// Remember visibility choice for convenience, true for private
 | 
				
			||||||
	LastRepoVisibility bool
 | 
						LastRepoVisibility bool
 | 
				
			||||||
@@ -119,6 +121,11 @@ func (u *User) BeforeUpdate() {
 | 
				
			|||||||
	u.UpdatedUnix = time.Now().Unix()
 | 
						u.UpdatedUnix = time.Now().Unix()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Set time to last login
 | 
				
			||||||
 | 
					func (u *User) SetLastLogin() {
 | 
				
			||||||
 | 
						u.LastLoginUnix = time.Now().Unix()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (u *User) AfterSet(colName string, _ xorm.Cell) {
 | 
					func (u *User) AfterSet(colName string, _ xorm.Cell) {
 | 
				
			||||||
	switch colName {
 | 
						switch colName {
 | 
				
			||||||
	case "full_name":
 | 
						case "full_name":
 | 
				
			||||||
@@ -127,6 +134,8 @@ func (u *User) AfterSet(colName string, _ xorm.Cell) {
 | 
				
			|||||||
		u.Created = time.Unix(u.CreatedUnix, 0).Local()
 | 
							u.Created = time.Unix(u.CreatedUnix, 0).Local()
 | 
				
			||||||
	case "updated_unix":
 | 
						case "updated_unix":
 | 
				
			||||||
		u.Updated = time.Unix(u.UpdatedUnix, 0).Local()
 | 
							u.Updated = time.Unix(u.UpdatedUnix, 0).Local()
 | 
				
			||||||
 | 
						case "last_login_unix":
 | 
				
			||||||
 | 
							u.LastLogin = time.Unix(u.LastLoginUnix, 0).Local()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -127,6 +127,13 @@ func SignInPost(ctx *context.Context, form auth.SignInForm) {
 | 
				
			|||||||
	// Clear whatever CSRF has right now, force to generate a new one
 | 
						// Clear whatever CSRF has right now, force to generate a new one
 | 
				
			||||||
	ctx.SetCookie(setting.CSRFCookieName, "", -1, setting.AppSubUrl)
 | 
						ctx.SetCookie(setting.CSRFCookieName, "", -1, setting.AppSubUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Register last login
 | 
				
			||||||
 | 
						u.SetLastLogin()
 | 
				
			||||||
 | 
						if err := models.UpdateUser(u); err != nil {
 | 
				
			||||||
 | 
						    ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
 | 
						    return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
 | 
						if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
 | 
				
			||||||
		ctx.SetCookie("redirect_to", "", -1, setting.AppSubUrl)
 | 
							ctx.SetCookie("redirect_to", "", -1, setting.AppSubUrl)
 | 
				
			||||||
		ctx.Redirect(redirectTo)
 | 
							ctx.Redirect(redirectTo)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@
 | 
				
			|||||||
								<th>{{.i18n.Tr "admin.users.admin"}}</th>
 | 
													<th>{{.i18n.Tr "admin.users.admin"}}</th>
 | 
				
			||||||
								<th>{{.i18n.Tr "admin.users.repos"}}</th>
 | 
													<th>{{.i18n.Tr "admin.users.repos"}}</th>
 | 
				
			||||||
								<th>{{.i18n.Tr "admin.users.created"}}</th>
 | 
													<th>{{.i18n.Tr "admin.users.created"}}</th>
 | 
				
			||||||
 | 
													<th>{{.i18n.Tr "admin.users.last_login"}}</th>
 | 
				
			||||||
								<th>{{.i18n.Tr "admin.users.edit"}}</th>
 | 
													<th>{{.i18n.Tr "admin.users.edit"}}</th>
 | 
				
			||||||
							</tr>
 | 
												</tr>
 | 
				
			||||||
						</thead>
 | 
											</thead>
 | 
				
			||||||
@@ -38,6 +39,11 @@
 | 
				
			|||||||
									<td><i class="fa fa{{if .IsAdmin}}-check{{end}}-square-o"></i></td>
 | 
														<td><i class="fa fa{{if .IsAdmin}}-check{{end}}-square-o"></i></td>
 | 
				
			||||||
									<td>{{.NumRepos}}</td>
 | 
														<td>{{.NumRepos}}</td>
 | 
				
			||||||
									<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created }}</span></td>
 | 
														<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created }}</span></td>
 | 
				
			||||||
 | 
														{{if .LastLoginUnix}}
 | 
				
			||||||
 | 
															<td><span title="{{DateFmtLong .LastLogin}}">{{DateFmtShort .LastLogin }}</span></td>
 | 
				
			||||||
 | 
														{{else}}
 | 
				
			||||||
 | 
															<td><span>{{$.i18n.Tr "admin.users.never_login"}}</span></td>
 | 
				
			||||||
 | 
														{{end}}
 | 
				
			||||||
									<td><a href="{{$.Link}}/{{.ID}}"><i class="fa fa-pencil-square-o"></i></a></td>
 | 
														<td><a href="{{$.Link}}/{{.ID}}"><i class="fa fa-pencil-square-o"></i></a></td>
 | 
				
			||||||
								</tr>
 | 
													</tr>
 | 
				
			||||||
							{{end}}
 | 
												{{end}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user