首页 > 解决方案 > 使用设计有效地在 Rails 中保存用户会话

问题描述

我正在尝试学习 Rails,并使用设计创建了用户模型,但只是使用 Rails 一个 API。我在控制器上添加了自定义验证,它工作正常。用户可以在从前端发布数据时登录。但是,问题在于浏览器不会将会话存储在任何地方。因此,每次重新加载页面时,会话都将被视为新会话。我想知道 devise 是否具有内置功能,可以创建会话并存储在 cookie 或本地存储中。

class API::V1::SessionsController < Devise::SessionsController
  def create
    @user = User.find_by_email(user_params[:email])
    if @user && @user.valid_password?(user_params[:password])
      sign_in :user, @user
      render json: @user
    elsif @user && not(@user.valid_password?(user_params[:password]))
      invalid_attempt
    else
      no_user
    end
  end

  def destroy
    @message = "signed out"
    sign_out(@user)
    render json: @message
  end

  private

  def no_user
    render json: {error: "An account with this email doesn't exist. Please create a new one"}, status: :unprocessable_entity
  end

  def invalid_attempt
    render json: { error: "Your password isn't correct" }, status: :unprocessable_entity
  end

  def user_params
    params.require(:user).permit(:email, :password)
  end
end

标签: ruby-on-railsdeviseruby-on-rails-5

解决方案


推荐阅读