Files
libr-2/app/controllers/api/v1/application_controller.rb
2018-06-04 20:55:53 +10:00

58 lines
1.5 KiB
Ruby

class Api::V1::ApplicationController < ActionController::Base
include ActionController::Serialization
skip_before_action :verify_authenticity_token, raise: false
serialization_scope :view_context
before_action :current_user!
before_action :authenticate_user_from_token
def current_user!
@current_user = nil
@current_user = current_user if user_signed_in?
end
def user_json(user= current_user)
{
user: {
id: user.id,
name: user.name,
email: user.email,
token: JWT.encode({id: user.id}, 'tuxue', 'HS256')
}
}
end
def authenticate_user_from_token
token = request.headers["Authorization"].try(:split, ' ').try(:last)
begin
decoded_token = JWT.decode token, 'tuxue', true
@current_user = User.find(decoded_token[0]['id'])
return render json: {message: 'Token is not valid'}, status: 401 unless @current_user
rescue JWT::DecodeError => e
return render json: {message: 'Token is not valid'}, status: 401
end
end
def fetch_current_user
auth_token = AuthToken.find_by(value: request.headers["Authorization"].try(:split, ' ').try(:last))
@current_user = auth_token.user if auth_token
end
private
def load_target_user
@target_user = User.find_by id: params[:user_id]
render json: {msg: '不能找到该用户'}, status: 404 unless @target_user
end
def load_post
@target_post = Post.find_by id: params[:post_id] || params[:id]
render json: {msg: '不能找到该文章'}, status: 404 unless @target_post
end
end