FIX: 完善退出登录接口 get_user_info接口

master
陈古峰 3 years ago
parent bf6b195228
commit d5f684b3bd

@ -51,6 +51,39 @@ class AccountsController < ApplicationController
end
end
def logout
UserAction.create(action_id: User.current.id, action_type: "Logout", user_id: User.current.id, :ip => request.remote_ip)
# 将tokens里面的session记录设置为失效状态
session_id = cookies[User::SESSION_ACTION]
token = Token.find_by(action:User::SESSION_ACTION,user_id:User.current.id,status:[Token::STATUS_EX_LOGIN,Token::STATUS_LOGIN],value:session_id)
if token.present?
token.status = Token::STATUS_LOGOUT
token.save!
end
logout_user
render :json => { status: 1, message: "退出成功!" }
end
def logout_user
if User.current.logged?
if autologin = cookies.delete(autologin_cookie_name)
User.current.delete_autologin_token(autologin)
end
UserOnline.logout(User.current.id)
#Token.where(user_id: User.current.id).delete_all # 退出登录清空当前用户所有的token
User.current.delete_session_token(session[:tk])
User.current.delete_session_token(session[:user_id])
User.current.delete_session_token(session[:request_user_id])
self.logged_user = nil
end
session[:user_id] = nil
session[:request_user_id] = nil
end
def activation
ActiveRecord::Base.transaction do
id = params[:id]
@ -82,14 +115,14 @@ class AccountsController < ApplicationController
def logged_user=(user)
session_id = session.id.to_s || session[:session_id]
# session_id = session.id.to_s || session[:session_id]
reset_session
if user && user.is_a?(User)
User.current = user
start_user_session(user)
else
# User.current = nil
User.current = User.anonymous
end
end

@ -1,5 +1,6 @@
class ApplicationController < ActionController::Base
include LoggerHelper
include LoginHelper
include ApplicationHelper
before_action :user_setup
def generate_code(size)
@ -32,8 +33,9 @@ class ApplicationController < ActionController::Base
elsif session_login_user = try_to_token_session
session_login_user
elsif autologin_user = try_to_autologin
p
autologin_user # 只有当没有重要考试的时候才会走这里登陆
else
User.anonymous
end
end

@ -1,2 +1,13 @@
module UsersHelper
def identity_text(identity)
case identity
when 0
"教师"
when 1
"学生"
when -1
"游客"
end
end
end

@ -18,7 +18,17 @@ class User < ApplicationRecord
STATUS_ACTIVE = 1
STATUS_LOCKED = 2
end
def logged?
true
end
module USER_TYPE
ANONYMOUS = "Anonymous"
USER = "User"
end
def self.anonymous
User.find_by(user_type:USER_TYPE::ANONYMOUS)
end
def self.current=(user)
RequestStore.store[:current_user] = user
@ -37,6 +47,15 @@ class User < ApplicationRecord
user.update(last_login_on: Time.now) if user
user
end
def delete_session_token(value)
Token.where(:user_id => id, :action => 'session', :value => value).delete_all
end
def delete_autologin_token(value)
Token.where(:user_id => id, :action => 'autologin', :value => value).delete_all
end
# 修改用户状态
def activate
self.status = STATUS_ACTIVE

@ -5,5 +5,8 @@ json.status @user.status
json.last_login_on @user.last_login_on
json.phone @user.phone
json.ID_number @user.ID_number
json.admin @user.admin
json.identity_text identity_text @user.identity
json.identity @user.identity
json.created_at @user.created_at
json.updated_at @user.updated_at

@ -4,6 +4,7 @@ scope '/api' do
collection do
post :login
post :register
get :logout
end
member do
get :activation

@ -0,0 +1,5 @@
class AddIdentityToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :identity, :integer, comment: "身份字段 0 老师 1学生 -1游客"
end
end

@ -0,0 +1,5 @@
class AddUserTypeToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :user_type, :string
end
end

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2023_09_01_082819) do
ActiveRecord::Schema.define(version: 2023_09_01_094526) do
create_table "edu_settings", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
t.string "name"
@ -53,6 +53,8 @@ ActiveRecord::Schema.define(version: 2023_09_01_082819) do
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "admin", default: 0, comment: "管理员"
t.integer "identity", comment: "身份字段 0 老师 1学生 -1游客"
t.string "user_type"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["login"], name: "index_users_on_login", unique: true
t.index ["phone"], name: "index_users_on_phone", unique: true

Loading…
Cancel
Save