Warden::Manager.after_authentication 내에서 auth에서 request를 얻을 수 있습니다.

5086 단어 루비Railsdevise
제목으로 거의 완결됩니다 w

Devise를 사용한 인증 동작에 로그인 후 작동하는 후크를 추가했는데, 후크 내에서 요청이 필요하고 어떻게하면 얻을 수 있는지 모르겠지만 타이틀 방식으로 얻을 수 있었다는 이야기 입니다.

상황이 한정적이고 그다지 범용성은 없을지도 모릅니다만, 어쩌면 세상에는 혼자 정도 나와 비슷한 빠지는 방법을 하는 사람도 있을지도 모른다고 생각 기사로 하는 것만 해 보았습니다 . 원한다면 사귀십시오.

운영 환경


  • Ruby 2.4.2
  • Rails 5.2.0
  • Devise 4.4.3

  • 배경 등



    우리는 직장에서 rails 응용 프로그램을 개발하고 있습니다. 그 때에 「로그인할 때마다 ○○를 시킨다」라고 하는 처리를 추가하게 되었습니다.

    로그인 주위는 Devise (을)를 사용해 실장하고 있었으므로, 아래의 참고 기사를 보고, Warden 의 callbacks 를 사용하면 전술의 동작을 실현할 수 있을까 생각해 그 방향으로 진행했습니다.

    참고 기사


  • Can I execute custom actions after successful sign in with Devise?
  • Devise를 사용하고 있고 처음 로그인할 때만 처리하고 싶은 경우

  • 코드 개요



    인증 후 매번 움직이는 후크는 after_authentication 과 같습니다. 그래서 이것을 사용했습니다.
    initializers 부하만 있으면 좋을 것 같습니다만, 별파일로 할 정도도 아니기 때문에 이번은 devise.rb 의 맨 아래에 추가하고 있습니다. 이제 로그인 할 때마다 아래 블록의 처리가 실행됩니다.

    config/initializers/devise.rb
    Devise.setup do |config|
    
      # 諸々やってますがここでは省略
    
      # ログイン後のフック
      Warden::Manager.after_authentication do |user, auth, _opts|
        # ここでいろいろやるよ
      end
    end
    

    주제



    그래서 여기에서 이번 기사의 이야기입니다.
    어떤 이유로 여기에서 request를 얻는 것이 필요합니다. (글쎄, 헤더를 보거나 IP를 보거나 같은 곳입니다)
    그러나 initializers에서 어떻게 요청을 얻을 수 있는지 잘 모르겠습니다.

    그리고 여러가지 조사해 보면, 이 훅의 2번째의 인수인 auth 로부터 request 를 취득할 수 있는 것을 알았습니다.
    콜백의 두 번째 인수에 오는 authWarden::Proxy의 인스턴스입니다. 게다가 여기에 include 되고 있는 Warden::Mixins::Common 를 쫓아 보면 request 라고 하는 아무리도 리퀘스트를 취득할 수 있는 것 같은 메소드를 발견했습니다.


    warden/lib/warden/mixins/common.rb
    # Convenience method to access the rack request.
    # :api: public
    def request
      @request ||= Rack::Request.new(@env)
    end # request
    

    좋아요.

    Rack 개요



    이쪽이 알기 쉬웠습니다.
    htps // 납땜 477. 네 t/d/? 왜 =20080716

    Rack의 이해는 필자도 아직 수상한 것이라도 조금 공부가 필요할 것 같습니다

    사용해 보았습니다.



    아래와 같이 시도해 보았을 때 예상했던 요청의 인스턴스를 얻을 수있었습니다. 그리고는 어떻게든 할 수 있을 것 같습니다. 했어
    pry(main)> auth.request.class
    => ActionDispatch::Request
    

    잡감



    확인은 하고 있지 않습니다만, after_authentication 이외의 훅내에서도 사용할 수 있다고 생각합니다. 만약 비슷한 내용으로 곤란한 분은 시험해 보세요.

    Warden Callbacks



    공식 리포지토리의 Wiki입니다.
    htps : // 기주 b. 코 m / 와 r 덴 코무 타이 / 와 r 덴 / 우키 / 굵은 cks

    좋은 웹페이지 즐겨찾기