# Auth0 - Ruby [![Build Status](https://travis-ci.org/auth0/ruby-auth0.svg?branch=master)](https://travis-ci.org/auth0/ruby-auth0) [![Gem Version](https://badge.fury.io/rb/auth0.svg)](http://badge.fury.io/rb/auth0) [![Coverage Status](https://coveralls.io/repos/auth0/ruby-auth0/badge.svg?branch=master)](https://coveralls.io/r/auth0/ruby-auth0?branch=master) [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://www.rubydoc.info/github/auth0/ruby-auth0/master/frames) [![MIT licensed](https://img.shields.io/dub/l/vibe-d.svg?style=flat)](https://github.com/auth0/ruby-auth0/blob/master/LICENSE) Ruby API client for the [Auth0](https://auth0.com) platform. ## Installation This gem can be installed directly: ``` bash $ gem install auth0 ``` ... or with [Bundler](https://bundler.io/man/bundle-add.1.html): ```bash bundle add auth0 ``` ## API Documentation You can build the API documentation with the following: ``` bash bundle exec rake documentation ``` To view the generated documentation, open `doc/Auth0/Api.html` . ## Management API v2 This SDK provides access to the [Management API v2](https://auth0.com/docs/api/management/v2) via modules that help create clear and accurate calls. Most of the interaction is done through the `Auth0Client` class, instantiated with the required credentials. As a simple example of how to get started, we'll create an admin route to point to a list of all users from Auth0: ```ruby # config/routes.rb Rails.application.routes.draw do # ... get 'admin/users', to: 'all_users#index' # ... end ``` ... and a Controller to handle that route: ```ruby # app/controllers/all_users_controllers.rb require 'auth0' class AllUsersController < ApplicationController # Get all users from Auth0 with "auth0" in their email. def index @params = { q: "email:*auth0*", fields: 'email,user_id,name', include_fields: true, page: 0, per_page: 50 } @users = auth0_client.users @params end private # Setup the Auth0 API connection. def auth0_client @auth0_client ||= Auth0Client.new( client_id: ENV['AUTH0_RUBY_CLIENT_ID'], token: ENV['AUTH0_RUBY_API_TOKEN'], domain: ENV['AUTH0_RUBY_DOMAIN'], api_version: 2, timeout: 15 # optional, defaults to 10 ) end end ``` In this example, we're using environment variables to store the values needed to connect to Auth0 and authorize. The `token` used above is an API token for the Management API with the scopes required to perform a specific action (in this case `read:users`). These tokens can be [generated manually](https://auth0.com/docs/api/management/v2/tokens#get-a-token-manually) using a test Application or with the [Application](https://manage.auth0.com/#/applications) being used for your project. Finally, we'll add a view to display the results: ```ruby # app/views/all_users/index.html.erb

Users

<%= debug @params %> <%= debug @users %> ``` This should show the parameters passed to the `users` method and a list of users that matched the query (or an empty array if none). ## Authentication In addition to the Management API, this SDK also provides access to [Authentication API](https://auth0.com/docs/api/authentication) endpoints with the `Auth0::API::AuthenticationEndpoints` module. For basic login capability, we suggest using our OmniAuth stategy [detailed here](https://auth0.com/docs/quickstart/webapp/rails/01-login). Other authentication tasks currently supported are: * Register a new user with a database connection using the `signup` method. * Redirect a user to the universal login page for authentication using the `authorization_url` method. * Log a user into a highly trusted app with the [Resource Owner Password grant](https://auth0.com/docs/api-auth/tutorials/password-grant) using the `login` method. * Exchange an authorization code for an access token on callback using the `obtain_user_tokens` method (see the note on state validation below). * Send a change password email to a database connection user using the `change_password` method. * Log a user out of Auth0 with the `logout_url` method. **Important note on state validation**: If you choose to implement a login flow callback yourself, it is important to generate and store a `state` value, pass that value to Auth0 in the `authorization_url` method, and validate it in your callback URL before calling `obtain_user_tokens`. For more information on state validation, [please see our documentation](https://auth0.com/docs/protocols/oauth2/oauth-state). Please note that this module implements endpoints that might be deprecated for newer tenants. If you have any questions about how and when the endpoints should be used, consult the [documentation](https://auth0.com/docs/api/authentication) or ask in our [Community forums](https://community.auth0.com/tags/wordpress). ## More Information * [Login using OmniAuth](https://auth0.com/docs/quickstart/webapp/rails/01-login) * [API authentication in Ruby](https://auth0.com/docs/quickstart/backend/ruby) * [API authentication in Rails](https://auth0.com/docs/quickstart/backend/rails) * [Managing authentication with Auth0 (blog)](https://auth0.com/blog/rails-5-with-auth0/) * [Ruby on Rails workflow with Docker (blog)](https://auth0.com/blog/ruby-on-rails-killer-workflow-with-docker-part-1/) ## What is Auth0? Auth0 helps you to: * Add authentication with [multiple authentication sources](https://docs.auth0.com/identityproviders), either social like **Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce** among others, or enterprise identity systems like **Windows Azure AD, Google Apps, Active Directory, ADFS or any SAML Identity Provider**. * Add authentication through more traditional **[username/password databases](https://docs.auth0.com/mysql-connection-tutorial)**. * Add support for **[linking different user accounts](https://docs.auth0.com/link-accounts)** with the same user. * Support for generating signed [JSON Web Tokens](https://docs.auth0.com/jwt) to call your APIs and **flow the user identity** securely. * Analytics of how, when, and where users are logging in. * Pull data from other sources and add it to the user profile with [JavaScript rules](https://docs.auth0.com/rules). ## Create a free Auth0 Account 1. Go to [Auth0](https://auth0.com) and click Sign Up. 2. Use Google, GitHub or Microsoft Account to login. ## Issue Reporting If you find a bug or have a feature request, please report them in this repository's [Issues tab](https://github.com/auth0/ruby-auth0/issues). Please do not report security vulnerabilities on the public GitHub issue tracker. The [Responsible Disclosure Program](https://auth0.com/whitehat) details the procedure for disclosing security issues. ## Author [Auth0](https://auth0.com) ## License This project is licensed under the MIT license. See the [LICENSE](LICENSE) file for more info.