🛤️Rails
Examples of Integrating Sign-In with Ethereum into Rails Applications
Overview
Rails is a full-stack framework built on top of Ruby to create web apps. The following are a set of gems and examples to get you started incorporating Sign-In with Ethereum to your Rails application.
Two gems have been created in order to make different examples of Rails integrations possible:
Which is a Rails gem that adds Sign-In with Ethereum local sign-in routes.
Which provides an OmniAuth strategy for Sign In With Ethereum.
Examples
Currently, there are three examples of Sign-In with Ethereum being used for authentication in Rails applications:
Which shows how to manually add endpoints to generate and verify the Sign-In with Ethereum message, and handle session-based user logins on a Rails application.
Which shows how to use siwe_rails gem to set up and configure the endpoints to generate and verify a Sign-In with Ethereum message in a Rails application.
Which shows how to use and configure the omniauth-siwe provider with OmniAuth in a Rails application.
To get started with any of the examples, clone the siwe-rails-examples repository locally:
git clone https://github.com/spruceid/siwe-rails-examplesWhen testing, please make sure to update the Ruby version specified in the example's Gemfile to the current version of Ruby that you are using. You can check your version of Ruby by entering ruby -v in your terminal.
To build and test each example, check out the following guides:
Custom-Controller
First, enter the
custom-controllerdirectory insiwe-rails-examples.
cd siwe-rails-examples/custom-controllerFinally, run the following commands to run the example:
bundle install
bin/rails db:migrate RAILS_ENV=development
bundle exec rails serverThis executes any database migrations, installs the proper gems, and runs the Rails example. Visit the example by visiting localhost:3000 in your web browser.
You should now see the example, and be able to Sign-In with Ethereum to authenticate and establish a session.
Rails-Engine
Clone the
siwe_railsgem in the same parent directory assiwe-rails-examples:
# from siwe-rails-examples
cd ..
git clone https://github.com/spruceid/siwe_railsNext, enter the
rails-enginedirectory insiwe-rails-examples.
cd siwe-rails-examples/rails-engineFinally, run the following commands to run the example:
bundle install
bin/rails db:migrate RAILS_ENV=development
bundle exec rails serverThis executes any database migrations, installs the proper gems, and runs the Rails example. Visit the example by visiting localhost:3000 in your web browser.
You should now see the example, and be able to Sign-In with Ethereum to authenticate and establish a session.
OmniAuth
Clone the
omniauth-siwegem in the same parent directory assiwe-rails-examples:
# from siwe-rails-examples
cd ..
git clone https://github.com/spruceid/omniauth-siweNext, enter the
omniauthdirectory insiwe-rails-examples.
cd siwe-rails-examples/omniauthTo be able to use oidc.login.xyz you will need to register as a client. To do that, use the following command, filling out your own
redirect_uris, according to your setup:
curl -X POST 'https://oidc.login.xyz/register' \
-H 'Content-type: application/json' \
--data '{"redirect_uris": ["http://localhost:3000/auth/siwe/callback"]}'In this case, since we're running this example on localhost:3000, we need the redirect_uris to contain http://localhost:3000/auth/siwe/callback.
After that, update
omniauth.rbunderomniauth/config/initializerswith both the provided identifier (client_id) and secret (client_secret):
client_options = {
scheme: 'https',
host: 'oidc.login.xyz',
port: 443,
authorization_endpoint: '/authorize',
token_endpoint: '/token',
userinfo_endpoint: '/userinfo',
jwks_uri: '/jwk',
identifier: 'your-client-id',
secret: 'your-client-secret'
}
provider :siwe, issuer: 'https://oidc.login.xyz/', client_options: client_optionsFinally, run the following commands to run the example:
bundle install
bundle exec rails serverThis installs the proper gems and runs the Rails example. Visit the example by visiting localhost:3000 in your web browser.
You should now see the example, and be able to Sign-In with Ethereum to authenticate and establish a session.
Last updated
