gpt4 book ai didi

ruby-on-rails - 在 grape api 端点中验证事件管理员用户

转载 作者:行者123 更新时间:2023-12-02 01:21:36 34 4
gpt4 key购买 nike

这是我的应用程序的组件

管理面板位于 myapp.com/admin 上,由活跃的管理员构建。然后我在 dashboard.myapp.com 上有一个用 AngularJs 构建的用户仪表板,然后我在 myapp.com/api 上用 grape 构建了 api。

我的管理面板上有一个功能,管理员可以以另一个用户的身份登录仪表板。我们称之为 capture_session。基本上,用户 session 由管理员捕获,我们删除一个 cookie admin_capture,其值为 admin_user 的 id。

现在这就是我想要实现的目标。在我的一个 grape api 端点中,我需要验证 session 是否已被捕获,并且捕获该 session 的管理员用户是否也登录了管理面板。

现在弄清楚 session 是否被捕获很容易,因为我已经有一个 cookie。但是如何验证管理员用户是否已登录?因为不能在 grape api 端点中调用事件的管理方法和助手。我可以用 cookies 或 session 实现吗?任何帮助将不胜感激

谢谢

最佳答案

所以这就是我解决这个问题的方法..我使用加密 session 设置了另一个 cookie admin_session,然后从仪表板返回了与 header 相同的 cookie。

在 grape 端点中,我解密了 session 并获得了管理员用户的 ID 和加密密码的初始部分。并使用此信息来验证管理员。

这是代码。

  admin_id      = ADMIN_ID_HEADER
admin_session = ADMIN_SESSION_HEADER
admin_user = AdminUser.find_by_id(admin_id)
return unless admin_id.present? && admin_session.present? && admin_user.present?

salt = Rails.application.config.action_dispatch.encrypted_cookie_salt
signed_salt = Rails.application.config.action_dispatch.encrypted_signed_cookie_salt
key_generator = ActiveSupport::KeyGenerator.new(ENV['SECRET_KEY_BASE'], :iterations => 1000)
secret = key_generator.generate_key(salt)
signed_secret = key_generator.generate_key(signed_salt)
encryptor = ActiveSupport::MessageEncryptor.new(secret, signed_secret, :serializer => ActiveSupport::MessageEncryptor::NullSerializer)
session_data = JSON.parse(encryptor.decrypt_and_verify(CGI::unescape(admin_session))) rescue {}

关于ruby-on-rails - 在 grape api 端点中验证事件管理员用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921179/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com