我有一个Ruby on Rails后端,目前使用cookie和会话来验证和登录用户。我相信会话的默认结束时间是用户关闭浏览器的时间,但我希望会话在创建后1小时结束。
以下是用于创建会话和验证用户的控制器:
会话_控制器.rb
class SessionsController < ApplicationController
skip_before_action :authorize, only: [:create]
include ::ActionController::Cookies
def create
user = User.find_by(email: params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
render json: user
else
render json: {errors: "check email and password"}, status: :unauthorized
end
end
def destroy
session.delete :user_id
head :no_content
end
end
用户_控制器.rb
class UsersController < ApplicationController
skip_before_action :authorize, only: [:create]
def show
render json: @current_user
end
end
应用程序_控制器.rb
class ApplicationController < ActionController::API
include ActionController::Cookies
before_action :authorize
private
def authorize
@current_user ||= User.find_by(id: session[:user_id])
render json: {errors: "Not authorized"}, status: :unauthorized unless @current_user
end
end
1条答案
按热度按时间g52tjvyc1#
您可以在初始化程序中设置过期时间,如下所示:
这将确保您的会话在1小时后过期。您可以尝试使用更短的时间段(如
1.minute
)进行验证。