There are no reviews yet. Be the first to send feedback to the community and the maintainers!
OpenIdAuthentication ==================== Provides a thin wrapper around the excellent ruby-openid gem from JanRan. Be sure to install that first: gem install ruby-openid To understand what OpenID is about and how it works, it helps to read the documentation for lib/openid/consumer.rb from that gem. The specification used is http://openid.net/specs/openid-authentication-2_0.html. Prerequisites ============= OpenID authentication uses the session, so be sure that you haven't turned that off. Alternatively, you can use the file-based store, which just relies on on tmp/openids being present in RAILS_ROOT. But be aware that this store only works if you have a single application server. And it's not safe to use across NFS. It's recommended that you use the database store if at all possible. To use the file-based store, you'll also have to add this line to your config/environment.rb: OpenIdAuthentication.store = :file This particular plugin also relies on the fact that the authentication action allows for both POST and GET operations. If you're using RESTful authentication, you'll need to explicitly allow for this in your routes.rb. The plugin also expects to find a root_url method that points to the home page of your site. You can accomplish this by using a root route in config/routes.rb: map.root :controller => 'articles' This plugin relies on Rails Edge revision 6317 or newer. Example ======= This example is just to meant to demonstrate how you could use OpenID authentication. You might well want to add salted hash logins instead of plain text passwords and other requirements on top of this. Treat it as a starting point, not a destination. Note that the User model referenced in the simple example below has an 'identity_url' attribute. You will want to add the same or similar field to whatever model you are using for authentication. Also of note is the following code block used in the example below: authenticate_with_open_id do |result, identity_url| ... end In the above code block, 'identity_url' will need to match user.identity_url exactly. 'identity_url' will be a string in the form of 'http://example.com' - If you are storing just 'example.com' with your user, the lookup will fail. There is a handy method in this plugin called 'normalize_url' that will help with validating OpenID URLs. OpenIdAuthentication.normalize_url(user.identity_url) The above will return a standardized version of the OpenID URL - the above called with 'example.com' will return 'http://example.com/' It will also raise an InvalidOpenId exception if the URL is determined to not be valid. Use the above code in your User model and validate OpenID URLs before saving them. config/routes.rb map.root :controller => 'articles' map.resource :session app/views/sessions/new.erb <% form_tag(session_url) do %> <p> <label for="name">Username:</label> <%= text_field_tag "name" %> </p> <p> <label for="password">Password:</label> <%= password_field_tag %> </p> <p> ...or use: </p> <p> <label for="openid_identifier">OpenID:</label> <%= text_field_tag "openid_identifier" %> </p> <p> <%= submit_tag 'Sign in', :disable_with => "Signing in…" %> </p> <% end %> app/controllers/sessions_controller.rb class SessionsController < ApplicationController def create if using_open_id? open_id_authentication else password_authentication(params[:name], params[:password]) end end protected def password_authentication(name, password) if @current_user = @account.users.authenticate(params[:name], params[:password]) successful_login else failed_login "Sorry, that username/password doesn't work" end end def open_id_authentication authenticate_with_open_id do |result, identity_url| if result.successful? if @current_user = @account.users.find_by_identity_url(identity_url) successful_login else failed_login "Sorry, no user by that identity URL exists (#{identity_url})" end else failed_login result.message end end end private def successful_login session[:user_id] = @current_user.id redirect_to(root_url) end def failed_login(message) flash[:error] = message redirect_to(new_session_url) end end If you're fine with the result messages above and don't need individual logic on a per-failure basis, you can collapse the case into a mere boolean: def open_id_authentication authenticate_with_open_id do |result, identity_url| if result.successful? && @current_user = @account.users.find_by_identity_url(identity_url) successful_login else failed_login(result.message || "Sorry, no user by that identity URL exists (#{identity_url})") end end end Simple Registration OpenID Extension ==================================== Some OpenID Providers support this lightweight profile exchange protocol. See more: http://www.openidenabled.com/openid/simple-registration-extension You can support it in your app by changing #open_id_authentication def open_id_authentication(identity_url) # Pass optional :required and :optional keys to specify what sreg fields you want. # Be sure to yield registration, a third argument in the #authenticate_with_open_id block. authenticate_with_open_id(identity_url, :required => [ :nickname, :email ], :optional => :fullname) do |result, identity_url, registration| case result.status when :missing failed_login "Sorry, the OpenID server couldn't be found" when :invalid failed_login "Sorry, but this does not appear to be a valid OpenID" when :canceled failed_login "OpenID verification was canceled" when :failed failed_login "Sorry, the OpenID verification failed" when :successful if @current_user = @account.users.find_by_identity_url(identity_url) assign_registration_attributes!(registration) if current_user.save successful_login else failed_login "Your OpenID profile registration failed: " + @current_user.errors.full_messages.to_sentence end else failed_login "Sorry, no user by that identity URL exists" end end end end # registration is a hash containing the valid sreg keys given above # use this to map them to fields of your user model def assign_registration_attributes!(registration) model_to_registration_mapping.each do |model_attribute, registration_attribute| unless registration[registration_attribute].blank? @current_user.send("#{model_attribute}=", registration[registration_attribute]) end end end def model_to_registration_mapping { :login => 'nickname', :email => 'email', :display_name => 'fullname' } end Attribute Exchange OpenID Extension =================================== Some OpenID providers also support the OpenID AX (attribute exchange) protocol for exchanging identity information between endpoints. See more: http://openid.net/specs/openid-attribute-exchange-1_0.html Accessing AX data is very similar to the Simple Registration process, described above -- just add the URI identifier for the AX field to your :optional or :required parameters. For example: authenticate_with_open_id(identity_url, :required => [ :email, 'http://schema.openid.net/birthDate' ]) do |result, identity_url, registration| This would provide the sreg data for :email, and the AX data for 'http://schema.openid.net/birthDate' Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license
rails
Ruby on Railswebpacker
Use Webpack to manage app-like JavaScript modules in Railsthor
Thor is a toolkit for building powerful command-line interfaces.jbuilder
Jbuilder: generate JSON objects with a Builder-style DSLspring
Rails application preloaderjquery-ujs
Ruby on Rails unobtrusive scripting adapter for jQueryrails-dev-box
A virtual machine for Ruby on Rails core developmentsolid_queue
Database-backed Active Job backendtailwindcss-rails
kredis
Higher-level data structures built on Redisactiveresource
Connects business objects and REST web servicesdocked
Running Rails from Docker for easy start to developmentstrong_parameters
Taint and required checking for Action Pack and enforcement in Active Modelglobalid
Identify app models with a URIactioncable
Framework for real-time communication over websocketsimportmap-rails
Use ESM with importmap to manage modern JavaScript in Rails without transpiling or bundling.jquery-rails
A gem to automate using jQuery with Railssprockets
Rack-based asset packaging systemsass-rails
Ruby on Rails stylesheet engine for Sasspropshaft
Deliver assets for Railsexception_notification
NOTICE: official repository moved to https://github.com/smartinez87/exception_notificationsdoc
Standalone sdoc generatorjsbundling-rails
Bundle and transpile JavaScript in Rails with esbuild, rollup.js, or Webpack.solid_cache
A database-backed ActiveSupport::Cache::Storerails-perftest
Benchmark and profile your Rails appsactivejob
Declare job classes that can be run by a variety of queueing backendsactivestorage
Store files in Rails applicationspjax_rails
PJAX integration for Railsactioncable-examples
Action Cable Examplescache_digests
sprockets-rails
Sprockets Rails integrationcssbundling-rails
Bundle and process CSS in Rails with Tailwind, PostCSS, and Sass via Node.js.activerecord-session_store
Active Record's Session Store extracted from Railsexecjs
Run JavaScript code from Rubyrails-observers
Rails observer (removed from core in Rails 4.0)mission_control-jobs
Dashboard and Active Job extensions to operate and troubleshoot background jobsactiontext
Edit and display rich text in Rails applicationsrequest.js
acts_as_list
NOTICE: official repository moved to https://github.com/swanandp/acts_as_listmarcel
Find the mime type of files, examining file, filename and declared typerubocop-rails-omakase
Omakase Ruby styling for Railsactionpack-page_caching
Static page caching for Action Pack (removed from core in Rails 4.0)commands
Run Rake/Rails commands through the consolessl_requirement
NOTICE: official repository moved to https://github.com/retr0h/ssl_requirementrails-controller-testing
Brings back `assigns` and `assert_template` to your Rails testsrails-html-sanitizer
acts_as_tree
NOTICE: official repository moved to https://github.com/amerine/acts_as_treeactionpack-action_caching
Action caching for Action Pack (removed from core in Rails 4.0)in_place_editing
NOTICE: official repository moved to https://github.com/amerine/in_place_editingprotected_attributes
Protect attributes from mass-assignment in ActiveRecord models.journey
A router for railsauto_complete
NOTICE: official repository moved to https://github.com/david-kerins/auto_completedartsass-rails
Integrate Dart Sass with the asset pipeline in Railsdynamic_form
NOTICE: official repository moved to https://github.com/joelmoss/dynamic_formsolid_cable
A database backed ActionCable adaptercountry_select
NOTICE: official repository moved to https://github.com/stefanpenner/country_selectrails-dom-testing
Extracting DomAssertions and SelectorAssertions from ActionView.routing_concerns
Abstract common routing resource concerns to cut down on duplication.esbuild-rails
Bundle and transpile JavaScript in Rails with esbuildrails-contributors
The web application that runs https://contributors.rubyonrails.orgrails-new
Create Rails projects with Ruby installedactionmailbox
Receive and process incoming emails in Railsrequestjs-rails
activemodel-globalid
Serializing models to a single string makes it easy to pass references aroundaccount_location
NOTICE: official repository moved to https://github.com/bbommarito/account_locationacts_as_nested_set
NOTICE: official repository moved to https://github.com/bbommarito/acts_as_nested_setiso-3166-country-select
WARNING: this repo is not maintained anymore, if you want to maintain it, please send an mail to rails-coreactiverecord-deprecated_finders
spring-watcher-listen
website
weblog
Superseded by https://github.com/rails/websiteprototype-ujs
prototype_legacy_helper
WARNING: this repo is not maintained anymore, if you want to maintain it, please send an mail to rails-coreverification
NOTICE: official repository moved to https://github.com/sikachu/verificationprototype-rails
Add RJS, Prototype, and Scriptaculous helpers to Rails 3.1+ appsactivemodel-serializers-xml
record_tag_helper
ActionView Record Tag Helpershomepage
Superseded by https://github.com/rails/websiterollupjs-rails
Bundle and transpile JavaScript in Rails with rollup.jsactionpack-xml_parser
XML parameters parser for Action Pack (removed from core in Rails 4.0)activesupport-json_encoder
etagger
Declare what goes in to your ETags: asset versions, account ID, etc.upload_progress
NOTICE: official repository moved to https://github.com/rishav/upload_progressdevcontainer
atom_feed_helper
NOTICE: official repository moved to https://github.com/TrevorBramble/atom_feed_helperrender_component
NOTICE: official repository moved to https://github.com/malev/render_component. Components allow you to call other actions for their rendered response while executing another actiongsoc2014
Project website and wiki for Ruby on Rails proposals to Google Summer of Code 2014gsoc2013
Project website and wiki for Ruby on Rails proposals to Google Summer of Code 2013ruby-coffee-script
Ruby CoffeeScript Compilerasset_server
NOTICE: official repository moved to https://github.com/andhapp/asset_serverhomepage-2011
This repo is now legacy. New homepage is at rails/homepagedeadlock_retry
NOTICE: official repository moved to https://github.com/heaps/deadlock_retryrails-docs-server
token_generator
NOTICE: official repository moved to https://github.com/bbommarito/token_generatorhttp_authentication
NOTICE: official repository moved to https://github.com/dshimy/http_authenticationirs_process_scripts
WARNING: this repo is not maintained anymore, if you want to maintain it, please send an mail to rails-core. The extracted inspector, reaper, and spawner scripts from script/process/*javascript_test
WARNING: this repo is not maintained anymore, if you want to maintain it, please send an mail to rails-corebuildkite-config
Fallback configuration for branches that lack a .buildkite/ directoryscriptaculous_slider
WARNING: this repo is not maintained anymore, if you want to maintain it, please send an mail to rails-corerequest_profiler
WARNING: this repo is not maintained anymore, if you want to maintain it, please send an mail to rails-core. Request profiler based on integration test scriptsLove Open Source and this site? Check out how you can help us