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_user
before_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
'Programing' 카테고리의 다른 글
Django 1.8 업데이트-AttributeError : django.test.TestCase에 'cls_atomics'속성이 없습니다. (0) | 2020.12.11 |
---|---|
암호 솔트를 "솔트"라고하는 이유는 무엇입니까? (0) | 2020.12.11 |
마지막 줄이 누락 된 쉘 스크립트 읽기 (0) | 2020.12.11 |
SQS 대 RabbitMQ (0) | 2020.12.11 |
Angular 2 라우터 이벤트 리스너 (0) | 2020.12.11 |