Programing

Rails Devise : 현재 로그인 한 사용자의 객체를 얻습니까?

lottogame 2020. 12. 11. 07:40
반응형

Rails Devise : 현재 로그인 한 사용자의 객체를 얻습니까?


최근 Rails 애플리케이션에 Devise를 설치했는데 다른 모델이나 컨트롤러 중 하나에서 현재 로그인 한 사용자의 인스턴스를 가져올 수 있는지 궁금합니다. 그렇다면 어떻게해야합니까?


Devise는 현재 로그인 한 사용자를 나타내는 편리한 메서드를 즉석에서 만듭니다.

그러나 생성 된 메소드 이름에는 사용자 모델의 클래스 이름이 포함된다는 점에 유의해야합니다. 예를 들어, Devise 모델이 ' User'이면 현재 로그인 한 사용자는 ' current_user' 로 액세스 할 수 있으며 Devise 클래스가 ' Admin'이면 로그인 한 관리자 사용자는 ' current_admin' 로 액세스 할 수 있습니다 .

예를 들어 ' user_signed_in?'또는 다시 ' admin_signed_in?' 와 같이 유사한 규칙으로 만들어진 다른 메서드 가 많이 있습니다. 정말 좋습니다.

이러한 메서드는 컨트롤러 및보기에서 사용할 수 있으므로보기에 다음이있을 수 있습니다.

<% if user_signed_in? %>
  <div>Signed in as... <%= current_user.email %></div>
<% end %>

마지막으로 앱에서 두 개 이상의 Devise 모델 (예 : 사용자 및 관리자)을 사용하는 경우 ' anybody_signed_in?'편의 방법을 사용하여 이러한 유형의 사용자가 로그인되어 있는지 확인할 수 있습니다.

<% if anybody_signed_in? %>
  <h2>Special offers</h2>
  <p>All registered users will receive free monkeys!</p>
<% end %>

최신 정보:

Devise 버전 1.2.0부터 ' anybody_signed_in?'는 더 이상 사용되지 않으며 ' signed_in?' 로 대체되었습니다.


Devise 도우미 메서드는 컨트롤러 및 뷰 레이어에서만 사용할 수 있습니다. 모델 계층에서는 사용할 수 없습니다 ( README의 컨트롤러 필터 및 도우미 섹션 참조 ).

  • Is it possible to get the currently logged in user from within a model?.

Devise가 생성하는 기본 도우미 메서드를 통해서는 불가능합니다. 그러나 current_user모델에 를 제공하는 사용할 수있는 대체 방법이 많이 있습니다 . 가장 간단한 방법은 이미 Alex Bartlow에 의해 제안되었으며, 단순히 current_user방법을 통해 모델에 전달하는 것입니다.

  • Is it possible to get the currently logged in user from within a controllers?

네 가능합니다. 를 사용하십시오 current_<modelname>. 여기서는 <modelname>Devise 인증 기능이있는 모델의 이름입니다 (예 : via rails g devise <modelname>). 예를 들어 모델이 User이면 current_user. 모델이 Elmo이면 current_elmo.


메소드 호출에 매개 변수로 전달하십시오. :).

한 가지 아이디어는 Thread.current[:current_user] = @current_userbefore_filter 로 사용 하는 것이지만 Thin + EM_Mysql2 + Rack :: FiberPool과 같은 배포 스택을 사용하는 경우이를 Fiber.current[:current_user].

이러한 솔루션은 좋은 디자인 논리의 부족을 실제로 은폐하고 있습니다.


간단한 방법은 다음과 같습니다.

if @suit.user == current_user

예:

= link_to "Back", root_path, class: "btn btn-default"

  -if @suit.user == current_user

    = link_to "Edit", edit_suit_path, class: "btn btn-default"

    = link_to "Delete", suit_path, method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"

참고 URL : https://stackoverflow.com/questions/4149326/rails-devise-get-object-of-the-currently-logged-in-user

반응형