Niedawno zainstalowałem program Devise na aplikacji szyny i zastanawiam się, czy można uzyskać wystąpienie aktualnie zalogowanego użytkownika w jednym z innych modeli lub kontrolerów, a jeśli tak, to jak to zrobić? ?Rails Devise: zdobądź obiekt aktualnie zalogowanego użytkownika?
Odpowiedz
Dewel tworzy metody wygody w locie, które reprezentują aktualnie zalogowanego użytkownika.
Jednak należy pamiętać, że wygenerowana nazwa metody zawiera nazwę klasy Twojego modelu użytkownika. na przykład jeśli twój model Devise nazywa się "User
", wówczas aktualnie zalogowany użytkownik może uzyskać dostęp za pomocą "current_user
", a jeśli twoja klasa Devise jest "Admin
", wówczas zalogowany użytkownik administracyjny może być dostępny z "current_admin
".
Istnieje wiele innych metod utworzonych z podobnymi konwencjami, na przykład "user_signed_in?
" lub ponownie "admin_signed_in?
", które są naprawdę ładne. dostępne są w kontrolery i widoki
Te metody więc może mieć następujące w widoku:
<% if user_signed_in? %>
<div>Signed in as... <%= current_user.email %></div>
<% end %>
Wreszcie, jeśli używasz dwóch lub więcej Opracować modele w swojej aplikacji (np użytkownika i administratora), można użyć metody „anybody_signed_in?
” wygoda, by sprawdzić, czy którykolwiek z tych typów użytkowników zostały podpisane w:
<% if anybody_signed_in? %>
<h2>Special offers</h2>
<p>All registered users will receive free monkeys!</p>
<% end %>
Aktualizacja:
Od opracować wersji 1.2.0, „anybody_signed_in?
” została wycofana i zastąpiona przez „signed_in?
”
Przekaż go jako parametr do wywołania metody :).
Jednym z pomysłów jest wykorzystanie Thread.current[:current_user] = @current_user
jako before_filter - ale jeśli używasz stos rozmieszczenia jak Chude + EM_Mysql2 + Rack :: FiberPool, musisz ustawić, że do Fiber.current[:current_user]
.
Rozwiązania te po prostu zasłaniają brak dobrej logiki projektowej.
Osobiście pod wystaje wartości kontekstowe na przedmiot gwintu być "zapach". Zdajesz sobie sprawę, że w ostatnim wierszu, tak po prostu, ale chcę tylko podkreślić, że ... – jaydel
są dostępne tylko w sterowniku i przeglądaj warstwy Metody pomocnicze opracować. Nie są dostępne w warstwie modelu (patrz sekcja Filtry kontrolerów i pomocników pod numerem README).
Is it possible to get the currently logged in user from within a model?
.
Nie jest to możliwe za pomocą domyślnych metod pomocniczych, które Devise tworzy dla ciebie. Istnieje jednak wiele alternatywnych metod, które można zastosować, aby dostarczyć model do modelu current_user
. Najprostszy sposób został już zaproponowany przez Alexa Bartlowa, a to po prostu przekazać current_user
za pomocą metody do swojego modelu.
Is it possible to get the currently logged in user from within a controllers?
Tak jest to możliwe. Użyj current_<modelname>
, gdzie <modelname>
to nazwa modelu, który ma możliwości uwierzytelniania Devise (tj. Przez rails g devise <modelname>
).Jeśli na przykład Twój model to User
, użyjesz current_user
. Jeśli Twój model to Elmo
, możesz użyć current_elmo
.
prosty sposób jest następujący:
if @suit.user == current_user
przykład:
= 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"
- 1. Jak uzyskać poświadczenia (NetworkCredential) aktualnie zalogowanego użytkownika?
- 2. Pobierz aktualnie zalogowanego użytkownika na Windows
- 3. Symfony2 - Wstrzyknięcie aktualnie zalogowanego użytkownika do detektora
- 4. Devise Przypomnienie hasła dla zalogowanego użytkownika
- 5. Jak uzyskać identyfikator użytkownika aktualnie zalogowanego użytkownika w Django?
- 6. Symfony2: Jak zweryfikować jednostkę, biorąc pod uwagę aktualnie zalogowanego użytkownika?
- 7. Jak znaleźć aktualnie zalogowanego użytkownika w Spring Boot?
- 8. Jak uzyskać listę ról dla aktualnie zalogowanego użytkownika?
- 9. Python, pobierz specjalne foldery systemu Windows dla aktualnie zalogowanego użytkownika
- 10. W Django, skąd mam znać aktualnie zalogowanego użytkownika?
- 11. Rails 4 + Devise 3.0.0 Dodawanie nazwy użytkownika
- 12. Rails/Devise - Określanie, kiedy sesja użytkownika wygaśnie
- 13. Podnieś śledzenia zalogowanego użytkownika
- 14. Rails Devise Action Cable
- 15. Dostęp zalogowanego użytkownika w szablonie
- 16. Rails 3 z Devise for Authentication - Jak ręcznie utworzyć użytkownika?
- 17. Zdobądź token użytkownika Facebooka
- 18. Jak mogę pobrać identyfikator UM TCM aktualnie zalogowanego użytkownika w kodzie JavaScript?
- 19. UserDetails getPassword zwraca null w spring security 3.1. Jak zdobyć hasło aktualnie zalogowanego użytkownika?
- 20. Odsyłam dane z Facebooka do aktualnie zalogowanego użytkownika za pomocą Passport.js
- 21. Rails Devise Zapraszalne przekierowanie po wysłaniu invititaion
- 22. Ujawnianie Rails/Devise Uwierzytelnianie dla aplikacji iOS
- 23. Devise and Rails - ArgumentError in Devise :: RegistrationsController # create
- 24. Rails Devise and devise_token_auth. Nie działa obok
- 25. Rails 3.2 + Devise 2.1 + OmniAuth + uwierzytelnianie Backbone.js
- 26. Uzyskaj identyfikator użytkownika zalogowanego użytkownika w Asp.Net MVC 5
- 27. Inna strona dla zalogowanego użytkownika i niezalogowanego użytkownika na root
- 28. Devise + Subdomain - Przekieruj użytkownika do sign_in
- 29. Najlepszy sposób wyświetlania bieżącego zalogowanego użytkownika w default.ctp?
- 30. Utwórz użytkownika w programie Devise z JSON
Wszystko, co Scott mówi, jest poprawne, ale także (i to może być również nowe) Wywołaj wywołania "user" i "admin" tutaj " zakresy ". Jeśli widzisz to słowo w dokumentacji, właśnie o to chodzi. – Peeja
Ale gdzie w obiekcie żądania znajdują się te informacje? – mehulkar