# Monkey patching su devise

**URL:** <https://www.ruby-forum.com/t/monkey-patching-su-devise/218031>\
**Category:** IT\
**Created:** [March 19, 2012, 12:51pm UTC](https://www.ruby-forum.com/t/monkey-patching-su-devise/218031 "2012-03-19T12:51:01Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [March 19, 2012, 12:51pm UTC](https://www.ruby-forum.com/t/monkey-patching-su-devise/218031/1 "2012-03-19T12:51:01Z")

</div>

Stavo provando ad alterare il metodo create di  
Devise::SessionsController, la prova da console funziona ma quando lo  
provo su web il bind non si sposta dall’originale, cosa può essere?

class Devise::SessionsController  
original\_create = instance\_method :create  
define\_method :create do  
redirect\_to root\_path, :notice =\> “aaa”  
end  
end

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [March 20, 2012, 2:47am UTC](https://www.ruby-forum.com/t/monkey-patching-su-devise/218031/2 "2012-03-20T02:47:47Z")

</div>

Personalmente non ho mai usato define\_method per riscrivere una action  
in un controller.

Ho dovuto aggiungere logica al logout di devise l’altro giorno ed ho  
aggiunto un sessions\_controller.rb e ridefinito la action aggiunto la  
mia riga e poi chiamato super per far fare a devise quel che deve  
fare:

class SessionsController \< Devise::SessionsController  
respond\_to :html

def destroy  
current\_user.reset\_game\_sessions!  
super  
end  
end

avevo seguito:

> **[GitHub - heartcombo/devise: Flexible authentication solution for Rails with...](https://github.com/heartcombo/devise)**
>
> Flexible authentication solution for Rails with Warden.

nel paragrafo: Configuring controllers

HTH,  
Enrico

2012/3/19 Marco M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> end
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Enrico T.  
Software development and web design  
currently working @ [http://abc.com.au](http://abc.com.au)  
Sydney, NSW, Australia  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
mobile (AU) +00610416748450

> **[Enrico Teotti | Technical & Product Consultant](https://teotti.com)**
>
> Technical coach and product management consultant with 20+ years bridging software development and product management across the US, Europe, and Australia. I help teams through strategy, facilitation, and hands-on guidance.

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [March 20, 2012, 10:58am UTC](https://www.ruby-forum.com/t/monkey-patching-su-devise/218031/3 "2012-03-20T10:58:50Z")

</div>

Grazie Enrico, hai ragione era anche scritto ma non l’avevo notato.  
Utilizzare l’ereditarietà è sempre meglio e non ci sono dubbi ma non  
riuscivo a spostare il bind dall’originale per cui ero passato alle  
maniere forti

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 10, 2012, 6:57pm UTC](https://www.ruby-forum.com/t/monkey-patching-su-devise/218031/4 "2012-04-10T18:57:37Z")

</div>

Avevo personalizzato la creazione della sessione e funzionava, ora non  
capisco cosa è successo ma non funziona più, neanche la cosa più banale  
come questo esempio:

def create  
params[:user][:email] = nil  
params[:user][:password] = nil  
super  
end

non ci si dovrebbe mai loggare ed invece, pur eseguendo quel codice, con  
credenziali corrette viene effettuato il login, come se devise  
memorizzasse le informazioni in anticipo, eppure è sempre la versione  
2.0.4 e non ho cambiato nulla.  
Forse sono solo stanco e domani tornerà a funzionare?

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [April 11, 2012, 2:06pm UTC](https://www.ruby-forum.com/t/monkey-patching-su-devise/218031/5 "2012-04-11T14:06:41Z")

</div>

Era una before filter nell’application controller:

class ApplicationController \< ActionController::Base  
before\_filter :set\_current\_user  
def set\_current\_user  
User.current\_user = current\_user  
end  
end

-\_-
