Hello guys, I’ve been trying to make remote authentication working with devise and i found this useful post: devise remote authentication. The problem is that the post example wasn’t working correctly with new devise versions (3.4.x); In this post I’ll explain you the changes that you need to do to make it work with devise 3.4. Note: Before reading the following part read the other article. The problem are the changes to Devise Authenticatable class regarding the serialization methods. In order to make it work you need to use the following code in your RemoteAuthenticatable Strategy:
module Devise module Models module RemoteAuthenticatable
def serialize_from_session(username, password) resource = User.new resource.username = username resource.password = password resource end def serialize_into_session(resource) #IMP you can only pass two params, no more because of this code : # devise.rb.466 args = key[-2, 2] [resource.username, resource.password] end end end end end
What happens is that devise passes the result of serialize_into_session to serialize_from_session but it fetches only the last 2 items of the return value: “args = key[-2,2]”.
for this reason you need to pass the needed information in a two item array in order to make this work (if you need more data replace the items with an hash). In this example we use the username to identify in a unique way the user and then we create an user with the given username when we deserialize the item (you can also have a custom method that fetches the model form a temporary memory data or a model saved in the database).
I hope you found this article useful! If you have any question feel free to ask me (will help to increase the quality of the post). Happy coding and enjoy ruby!