Ho recentemente installato Devise su un'applicazione rails e mi chiedo se sia possibile ottenere un'istanza dell'utente attualmente connesso in uno degli altri modelli o controller e, in caso affermativo, come farlo? ?Rails Devise: ottiene oggetto dell'utente attualmente connesso?
risposta
Devise crea al volo metodi di convenienza che rappresentano l'utente attualmente registrato.
Tuttavia, si deve notare che il nome del metodo generato include il nome classe del modello utente. per esempio. se il tuo modello Devise è chiamato 'User
', l'utente attualmente connesso può accedere con 'current_user
', e se la tua classe Devise è 'Admin
', allora l'utente amministratore connesso può accedere con 'current_admin
'.
Esistono numerosi altri metodi creati con convenzioni simili, ad esempio "user_signed_in?
" o ancora "admin_signed_in?
", che sono davvero carini.
Questi metodi sono disponibili in controller e viste così si potrebbe avere la seguente in una vista:
<% if user_signed_in? %>
<div>Signed in as... <%= current_user.email %></div>
<% end %>
Infine, se si utilizza due o più ideare modelli nella tua app (ad esempio, utente e amministratore), è possibile utilizzare il 'anybody_signed_in?
' metodo comodo per verificare se uno di questi tipi di utenti sono firmati in:
<% if anybody_signed_in? %>
<h2>Special offers</h2>
<p>All registered users will receive free monkeys!</p>
<% end %>
Aggiornamento:
Poiché Devise versione 1.2.0, 'anybody_signed_in?
' è stata ritirata e sostituita da 'signed_in?
'
Passare come parametro alla chiamata metodo :).
Un'idea è quella di utilizzare Thread.current[:current_user] = @current_user
come before_filter - ma se si sta utilizzando una pila distribuzione come Thin + EM_Mysql2 + Rack :: FiberPool, dovrete impostare che a Fiber.current[:current_user]
.
Queste soluzioni nascondono solo una mancanza di buona logica di progettazione.
Personalmente ritengo attaccare valori contestuali sull'oggetto filo di essere un "odore". Lo ammetti nell'ultima riga, quindi complimenti, ma voglio solo enfatizzare che ... – jaydel
sono disponibili solo negli strati controller e visualizzare i metodi helper escogitare. Non sono disponibili a livello di modello (vedere la sezione Filtri e assistenti di controller di README).
Is it possible to get the currently logged in user from within a model?
.
Non è possibile tramite i metodi di supporto predefiniti creati da Devise. Tuttavia, esistono molti metodi alternativi che è possibile utilizzare per fornire il modello current_user
a un modello. Il modo più semplice è già stato suggerito da Alex Bartlow, ovvero passare semplicemente lo current_user
tramite un metodo al modello.
Is it possible to get the currently logged in user from within a controllers?
sì è possibile. Utilizzare current_<modelname>
, dove <modelname>
è il nome del modello con funzionalità di autenticazione Devise (ad esempio, tramite rails g devise <modelname>
).Se, ad esempio, il modello è User
, utilizzare current_user
. Se il tuo modello è Elmo
, allora dovresti usare current_elmo
.
metodo semplice è:
if @suit.user == current_user
esempio:
= 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. Dispositivo Bluetooth attualmente connesso Android
- 2. Da AWS SDK, come si ottiene il nome utente attualmente connesso (o l'utente IAM)?
- 3. Trova l'utente attualmente connesso in Django
- 4. Ottieni l'utente attualmente connesso su Windows
- 5. Come si ottengono le credenziali (NetworkCredential) dell'utente attualmente connesso?
- 6. Rails Devise: after_confirmation
- 7. Rails devise Controller Sessions
- 8. Rails + Devise + delayed_job?
- 9. Rails devise mail
- 10. Rails Devise authenticatate_user non funziona
- 11. Trovare l'utente attualmente connesso da un'estensione per Firefox
- 12. Come ottenere il ruolo dell'utente attualmente connesso in wordpress?
- 13. Symfony2 - Inietta l'utente attualmente connesso a un listener
- 14. Come ottenere un elenco di ruoli per l'utente attualmente connesso
- 15. Laravel-5.1 inietta l'utente attualmente connesso al mio controller
- 16. Come verificare se l'utente attualmente connesso è admin o no
- 17. Come ottenere il ruolo dell'utente attualmente connesso in Drupal 7?
- 18. Come ottengo l'account Windows attualmente connesso da una pagina ASP.NET?
- 19. Verificare se l'utente attualmente connesso ha authcookie persistente
- 20. Come ottenere l'id utente dell'utente attualmente connesso in Django?
- 21. Trova il numero di porta attualmente connesso SSH
- 22. Rails, Devise authentication, CSRF issue
- 23. Rails 5, Devise, Omniauth, Twitter
- 24. Rails 3 Override Devise Mailer
- 25. Rails devise error "NoMethodError ... merge"
- 26. Rails Autenticità del token CSRF e Devise
- 27. Rails 4 Devise 3.1.1 ActionController :: UnknownFormat in Devise :: RegistrationsController # new
- 28. Devise and Rails - ArgumentError in Devise :: RegistrationsController # create
- 29. DropDownList ottiene oggetto sottostante
- 30. Knockoutjs ottiene oggetto padre
Tutto ciò che Scott dice è corretto, ma anche (e potrebbe anche essere nuovo) Devise chiama 'user' e' admin' qui " ambiti". Se vedi questa parola nella documentazione, è a questo che si riferisce. – Peeja
Ma dove nell'oggetto richiesta ci sono queste informazioni? – mehulkar