Create a gist now

Instantly share code, notes, and snippets.

Custom devise strategy
# In config/initializers/local_override.rb:
require 'devise/strategies/authenticatable'
module Devise
module Strategies
class LocalOverride < Authenticatable
def valid?
true
end
def authenticate!
if params[:user]
user = User.find_by_email(params[:user][:email])
if user && user.encrypted_password == params[:user][:password]
success!(user)
else
fail
end
else
fail
end
end
end
end
end
Warden::Strategies.add(:local_override, Devise::Strategies::LocalOverride)
# In config/initializers/devise.rb
config.warden do |manager|
manager.default_strategies(:scope => :user).unshift :local_override
@jancel

How might one test this using rspec?

@r00k
Owner

Sorry, it's been a while since I've looked at this. I'm afraid the answer to that question is left as an exercise to the reader :)

@jancel

I forked it and put my spec in there for hungry minds.

https://gist.github.com/1367606

@r00k
Owner

Thanks!

@aag1091

thanks for code as well specs :)

@michaeljkchoi

Thanks! This was really helpful but to get this working on my end, I had to replace

if user && user.encrypted_password == params[:user][:password]

with

if user && user.valid_password?(params[:user][:password])

I also had to throw a

fail!

in order to get fail to also halt the authentication process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment