1
0
Fork 0
mirror of https://github.com/heartcombo/devise.git synced 2022-11-09 12:18:31 -05:00
heartcombo--devise/lib/devise/strategies/authenticable.rb

47 lines
1.6 KiB
Ruby

module Devise
module Strategies
# Default strategy for signing in a user, based on his email and password.
# Redirects to sign_in page if it's not authenticated
class Authenticable < Devise::Strategies::Base
# Authenticate a user based on email and password params, returning to warden
# success and the authenticated user if everything is okay. Otherwise redirect
# to sign in page.
def authenticate!
if valid_attributes? && resource = mapping.to.authenticate(attributes)
success!(resource)
else
store_location
redirect!(sign_in_path, :unauthenticated => true)
end
end
private
# Find the attributes for the current mapping.
def attributes
@attributes ||= params[scope]
end
# Check for the right keys.
def valid_attributes?
attributes && attributes[:email].present? && attributes[:password].present?
end
# Stores requested uri to redirect the user after signing in. We cannot use
# scoped session provided by warden here, since the user is not authenticated
# yet, but we still need to store the uri based on scope, so different scopes
# would never use the same uri to redirect.
def store_location
session[:"#{mapping.name}.return_to"] = request.request_uri if request.get?
end
# Create path to sign in the resource
def sign_in_path
"/#{mapping.as}/#{mapping.path_names[:sign_in]}"
end
end
end
end
Warden::Strategies.add(:authenticable, Devise::Strategies::Authenticable)