3

私のアプリケーションのコンポーネントは次のとおりですgrape apiエンドポイントでアクティブな管理者ユーザーを認証します

管理パネルはアクティブな管理者で作成されたmyapp.com/admin上にあります。 AnglesJsで構築されたdashboard.myapp.comのユーザーのためのダッシュボードがあり、myapp.com/apiでブドウを使ってapiを構築しています。

管理者がダッシュボードに別のユーザーとしてログインできる機能が管理パネルにあります。このcapture_sessionを呼び出します。基本的にユーザーセッションはadminによってキャプチャされ、値はadmin_userのidであるcookie admin_captureを削除します。

ここに私が達成したいことがあります。私のブドウのapiエンドポイントの1つでは、セッションがキャプチャされ、セッションをキャプチャした管理者ユーザーが管理パネルにもログインしていることを確認する必要があります。

セッションがキャプチャされているかどうかは、すでにクッキーがあるので簡単です。管理者ユーザーがログインしていることを確認するにはどうすればよいですか? をアクティブな管理メソッドとして、ヘルパーをgrape apiエンドポイントで呼び出すことはできません。 クッキーやセッションでこれを達成できますか?すべてのヘルプは非常だからここに私はこれを解決する方法である

おかげ

答えて

2

を理解されるであろう。.. 私は暗号化されたセッションで別のクッキーadmin_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 {} 
関連する問題