Warden::Manager.after_authentication 내에서 auth에서 request를 얻을 수 있습니다.
Devise를 사용한 인증 동작에 로그인 후 작동하는 후크를 추가했는데, 후크 내에서 요청이 필요하고 어떻게하면 얻을 수 있는지 모르겠지만 타이틀 방식으로 얻을 수 있었다는 이야기 입니다.
상황이 한정적이고 그다지 범용성은 없을지도 모릅니다만, 어쩌면 세상에는 혼자 정도 나와 비슷한 빠지는 방법을 하는 사람도 있을지도 모른다고 생각 기사로 하는 것만 해 보았습니다 . 원한다면 사귀십시오.
운영 환경
배경 등
우리는 직장에서 rails 응용 프로그램을 개발하고 있습니다. 그 때에 「로그인할 때마다 ○○를 시킨다」라고 하는 처리를 추가하게 되었습니다.
로그인 주위는 Devise (을)를 사용해 실장하고 있었으므로, 아래의 참고 기사를 보고, Warden 의 callbacks 를 사용하면 전술의 동작을 실현할 수 있을까 생각해 그 방향으로 진행했습니다.
참고 기사
코드 개요
인증 후 매번 움직이는 후크는 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 를 취득할 수 있는 것을 알았습니다.콜백의 두 번째 인수에 오는
auth
는 Warden::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
Reference
이 문제에 관하여(Warden::Manager.after_authentication 내에서 auth에서 request를 얻을 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tommy_aka_jps/items/864f83b1e412e19d2bfe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)