【问题标题】:How do you get Sorcery working with Grape in Rails?你如何让 Sorcery 在 Rails 中与 Grape 一起工作?
【发布时间】:2020-05-16 03:48:10
【问题描述】:

如何在 Rails 下的 Grape 中使用基于 cookie 的 Sorcery 身份验证会话?

我有兴趣使用来自葡萄控制器的sessioncurrent_user 等命令。

【问题讨论】:

    标签: ruby-on-rails session-cookies grape sorcery


    【解决方案1】:

    将以下帮助程序添加到您的根 API 挂载点:

    class API < Grape::API
      ..
      helpers APIHelpers
      ..
    end
    
    # add this to app/api/api_helpers.rb
    module APIHelpers
      include Sorcery::Controller
      def session
        env['rack.session']
      end
    
      def reset_session
        if env['rack.session']&.respond_to?(:destroy)
          session.destroy
        else
          env['rack.session'] = {}
        end
      end
    
      def form_authenticity_token
        session[:_csrf_token] ||= SecureRandom.base64(32)
      end
    
      def current_user
        @current_user = login_from_session || nil unless defined?(@current_user)
        @current_user
      end
    end
    

    包括Sorcery::Controller 给了我所有的巫术方法(登录、current_user 等),但是有一些缺少的会话方法需要通过助手添加以确保巫术快乐。请注意,Grape 不提供与 rails 相同的 CookieJar,因此您将无法使用 cookies.signed。这对我来说不是问题,但可能对你来说是个问题。我处理了调用签名 cookie 的魔法函数。

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 2011-12-02
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2012-08-03
      • 2011-05-31
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多