Module: BrowserID::Rails::Base
- Defined in:
- lib/browserid/rails/base.rb
Overview
Public: Base module for inclusion into a controller. This module includes methods for dealing with BrowserID user authentication.
Class Method Summary collapse
-
.included(base) ⇒ Object
Internal: Modifies the controller this module is included in to provide authentication-related helper methods.
Instance Method Summary collapse
-
#authenticated? ⇒ Boolean
Public: Determines whether the current client is authenticated as a registered User.
-
#browserid_config ⇒ Object
Internal: Gets the application configuration for this gem.
-
#browserid_email ⇒ Object
Public: Gets the email address of the currently-authenticated user.
-
#current_user ⇒ Object
Public: Retrieves the user for the authenticated email address.
-
#login_browserid(email) ⇒ Object
Public: Sets the given email address as the currently-authenticated user.
-
#logout_browserid ⇒ Object
Public: Clears the saved email address for the currently-authenticated user.
-
#respond_to_browserid ⇒ Object
Public: Handles a POST-ed BrowserID assertion, responding appropriately to the request.
-
#verify_browserid(assertion) ⇒ Object
Public: Uses the configured verifier to check that a provided assertion is correct for the site audience.
Class Method Details
.included(base) ⇒ Object
Internal: Modifies the controller this module is included in to provide authentication-related helper methods
base - The Class this module is being included in.
15 16 17 |
# File 'lib/browserid/rails/base.rb', line 15 def self.included(base) base.send :helper_method, :browserid_config, :browserid_email, :current_user, :authenticated? end |
Instance Method Details
#authenticated? ⇒ Boolean
Public: Determines whether the current client is authenticated as a registered User.
Returns true if the client is authenticated and registered.
60 61 62 |
# File 'lib/browserid/rails/base.rb', line 60 def authenticated? !current_user.nil? end |
#browserid_config ⇒ Object
Internal: Gets the application configuration for this gem.
Returns the app config structure.
22 23 24 |
# File 'lib/browserid/rails/base.rb', line 22 def browserid_config ::Rails.application.config.browserid end |
#browserid_email ⇒ Object
Public: Gets the email address of the currently-authenticated user.
Returns the authenticated email address String.
33 34 35 |
# File 'lib/browserid/rails/base.rb', line 33 def browserid_email session[browserid_config.session_variable] end |
#current_user ⇒ Object
Public: Retrieves the user for the authenticated email address. This method uses the ‘browserid.user_model` and `browserid.email_field` config settings, which default to `User` and `email`.
Returns the current authenticated user, or nil if no user exists.
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/browserid/rails/base.rb', line 42 def current_user if browserid_email.nil? nil elsif @current_user @current_user else config = browserid_config user_model = config.user_model.constantize find_method = "find_by_#{config.email_field}".intern @current_user = user_model.send find_method, browserid_email end end |
#login_browserid(email) ⇒ Object
Public: Sets the given email address as the currently-authenticated user. The address is saved in the client’s session.
email - The String email address to consider authenticated.
72 73 74 |
# File 'lib/browserid/rails/base.rb', line 72 def login_browserid(email) session[browserid_config.session_variable] = email end |
#logout_browserid ⇒ Object
Public: Clears the saved email address for the currently-authenticated user. It is important to note that this does not remove the BrowserID assertion in the client’s browser.
79 80 81 |
# File 'lib/browserid/rails/base.rb', line 79 def logout_browserid session[browserid_config.session_variable] = nil end |
#respond_to_browserid ⇒ Object
Public: Handles a POST-ed BrowserID assertion, responding appropriately to the request. If successful, this logs-in the authenticated email and returns an OK status. If unsuccessful, it returns FORBIDDEN and an error message in the response body.
Returns nothing.
Examples
# POST /login
def create
respond_to_browserid
end
115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/browserid/rails/base.rb', line 115 def respond_to_browserid if params[:assertion].blank? head :bad_request else email, issuer, audience = verify_browserid params[:assertion] logger.info "Verified BrowserID assertion for #{email} issued by #{issuer} on #{audience}" login_browserid email head :ok end rescue StandardError => e # TODO: distinguish between process failures and invalid assertions logger.warn "Failed to verify BrowserID assertion: #{e.}" render status: :forbidden, text: e. end |
#verify_browserid(assertion) ⇒ Object
Public: Uses the configured verifier to check that a provided assertion is correct for the site audience.
Returns the verified email, identity issuer, and audience on success. Raises an error with a failure message if the client was not successfully authenticated.
Examples
verify_browserid(assertion)
# => "[email protected]", "persona.mozilla.com", "https://app.example.com:443"
95 96 97 98 99 |
# File 'lib/browserid/rails/base.rb', line 95 def verify_browserid(assertion) audience = browserid_config.audience audience ||= "%s%s:%d" % [request.protocol, request.host, request.port] browserid_config.verifier.verify(assertion, audience) end |