Skip to content Skip to sidebar Skip to footer

How Do You Know Your Merch Application Was Sent

Using Devise In Your Ruby-red on Rails Awarding [A Pace-by-Step Guide]

image

Miguel Angel Dubois HackerNoon profile picture

@ MikeDP4

Miguel Affections Dubois

Programming since 2008.

Authentication. You lot don't e'er want your users to accept faceless sessions that open your application without leaving whatever trace.

Of course, there are some applications in which yous don't need accounts for your users, just in the vast majority of the cases, you lot will need to manage some users and passwords.

If y'all are a beginner with blood-red on track you lot may already be thinking how to practise this. Create a user model, add some fields to your user model, including an encrypted countersign field.

Save your user's session in some way so they can remain online even after switching application windows, save some cookies so they can remain online even afterward closing the browser. Yous know, those things are pretty repetitive if you create new applications often, and if something is repetitive, yous can brand an algorithm that does information technology for y'all.

The special matter near the internet though is that most of what you retrieve about creating was already created past someone else. In the case of authentication for Ruby on Rails, at that place's a gem for that.

Devise is a very complete gem that does all the authentication piece of work for you lot, or nearly of information technology if you are thinking virtually a very specific feature you would want to implement.

When I first used it, I just wanted to make a basic login for my users and add some extra features to the registration process. Information technology took me a couple of hours to read the documentation and add what I wanted, and I wish I could accept found a more basic tutorial to guide myself with.

I want to do my past self a favor and make a curt tutorial on how to create a Rails application, add some extra fields to the user model, and change the default views of the precious stone.

Permit's begin. Create a project commencement if you haven't already.

image

And immediately after, add devise to the gemfile.

image

And so run bundle install on your final.

Wait for everything to install and when information technology's done, run this other command on your concluding:

                $ runway generate devise:install              

image

You can encounter we got some instructions with this one.

The first 1 is referring to the mailer settings. For a development surroundings, yous need to specify your default URL. This won't give you problem if y'all are non going to transport mail to your users, but allow'due south copy and paste the line on the development.rb file just in example nosotros demand to transport post to our users.

image

The second point asks us to define a root_url to something. I will leave this for later on, y'all don't really need anything on the root path of your application for devise to work. This is just the precious stone reminding yous to make a home page.

The tertiary betoken asks us to ensure we have flash letters on our application.html.erb file. Why? Well, this will let the users know if they are doing something wrong.

Default messages are already included on the devise gem and then you don't accept to write them. Simply copy and paste what devise shows you lot on the terminal wherever you lot desire it to be visible.

image

The terminal point is, in my opinion, the most important one. It'due south telling us to do generate the views of the devise for customization. Nosotros will run the command now and alter the files later.

image

Groovy! We tin now generate our model. You can call your devise model whatever you desire, I will call information technology "User". Information technology's a generic name understandable by anyone. Let'south run the command now.

                $ rails generate devise User              

image

And before we migrate our database, let'southward go cheque the migration file.

                                  # frozen_string_literal: true                                      grade                    DeviseCreateUsers                    < ActiveRecord::Migration[half dozen.0]                                      def                    alter                                    create_table                  :users                  do                  |t|                  ## Database authenticatable                  t.string                  :email,                  null:                  false,                  default:                  ""                  t.string                  :encrypted_password,                  zero:                  false,                  default:                  ""                  ## Recoverable                  t.string                  :reset_password_token                  t.datetime                  :reset_password_sent_at                  ## Rememberable                  t.datetime                  :remember_created_at                  ## Trackable                  # t.integer  :sign_in_count, default: 0, goose egg: faux                  # t.datetime :current_sign_in_at                  # t.datetime :last_sign_in_at                  # t.string   :current_sign_in_ip                  # t.string   :last_sign_in_ip                  ## Confirmable                  # t.cord   :confirmation_token                  # t.datetime :confirmed_at                  # t.datetime :confirmation_sent_at                  # t.cord   :unconfirmed_email # Merely if using reconfirmable                  ## Lockable                  # t.integer  :failed_attempts, default: 0, nada: false # Merely if lock strategy is :failed_attempts                  # t.string   :unlock_token # Just if unlock strategy is :email or :both                  # t.datetime :locked_at                  t.timestamps                  null:                  false                  stop                  add_index                  :users,                  :email,                  unique:                  truthful                  add_index                  :users,                  :reset_password_token,                  unique:                  true                  # add_index :users, :confirmation_token,   unique: true                  # add_index :users, :unlock_token,         unique: true                  end                  finish                              

Hither, y'all tin uncomment the fields you want to use, for instance, if y'all want to be able to confirm your users sending them an email, you tin can uncomment the four lines below # Confirmable. The devise gem volition do the rest (plus some configuration of your own you lot will have to investigate, every bit information technology's non going to exist covered in this tutorial).

Allow's add together a outset and last name to our users, just to give you an example on how to do it. We will use the same model devise created to add any fields you wish simply will need to do some modifications after. Let'southward create a new migration now.

                $ rails generate migration add_name_to_users proper noun:string surname:string              

This will generate a new migration file which will add some columns to the user table. Let's become check the migration file.

                                                      form                    AddNameToUsers                    <                    ActiveRecord::Migration[vi.0]                    def                    change                    add_column                    :users, :name, :cord                    add_column                    :users, :surname, :string                    end                    terminate                                                

Recollect, I didn't write any of this on the migration file, information technology was generated past rails. Everything seems to be adept, so we can do the database migration. On your terminal, you tin can either do

Or you tin besides write:

Either will work. After doing the migration, let's go check the sign-upwardly course on our app. We haven't washed anything at the moment and so we volition need to access it manually by typing the route in. First of all, run your server

Then, go to any internet browser you lot have on your calculator and become to this address: http://localhost:3000/users/sign_up . What you will see is your sign-up form, auto-generated by devise. It doesn't have any special mode, but you lot can accept intendance of that. What I'm concerned about is something else. Nosotros added a proper noun and surname to our users and it'southward not here! Let's go change that. Go to the views folder. Remember nosotros ran the command rail g devise:views? It volition come in handy at present. In our views folder, we take another folder called devise. Open it and search for the registrations binder. Here, you have the new and edit files. Let's open the new.html.erb file.

                                                      <h2>Sign up</h2>                  <%=                    form_for(resources,                    equally:                    resource_name,                    url:                    registration_path(resource_name))                    do                    |f|                  %>                  <%=                    return                    "devise/shared/error_messages",                    resource:                    resource                  %>                    <div                      class="field">                  <%=                    f.characterization                    :e-mail                  %>                    <br                      />                  <%=                    f.email_field                    :email,                    autofocus:                    true,                    autocomplete:                    "email"                  %>                    </div>                    <div                      form="field">                  <%=                    f.label                    :password                  %>                  <%                    if                    @minimum_password_length                  %>                    <em>(<%=                    @minimum_password_length                  %>                    characters minimum)</em>                  <%                    cease                  %>                    <br                      />                  <%=                    f.password_field                    :password,                    autocomplete:                    "new-countersign"                  %>                    </div>                    <div                      class="field">                  <%=                    f.label                    :password_confirmation                  %>                    <br                      />                  <%=                    f.password_field                    :password_confirmation,                    autocomplete:                    "new-countersign"                  %>                    </div>                    <div                      form="actions">                  <%=                    f.submit                    "Sign upwards"                  %>                    </div>                  <%                    end                  %>                  <%=                    render                    "devise/shared/links"                  %>                                                

This is the signup form, yep. But it's lacking the two fields we wanted to our user. Permit's add together them, actually, let's add these 2 fields to both the new and edit files. The edit file, by the mode, is for old users who desire to change their information, similar their email or password.

                                                      <div                      class="field">                  <%=                    f.label                    :proper noun                  %>                    <br                      />                  <%=                    f.text_field                    :proper name                  %>                    </div>                    <div                      class="field">                  <%=                    f.label                    :surname                  %>                    <br                      />                  <%=                    f.text_field                    :surname                  %>                    </div>                                                

I just immitated the stile set by the auto-generated sign-up form from devise. You can style information technology later with your own css. Let's see how information technology looks.

image

You should do the aforementioned with the edit.html.erb file while you are at it. For now, let'south test our sign-up form. I haven't added whatever more functionality to this app, but we should be able to add something to our database with this course. Let'south first run the panel and bank check if we have something at that place.

image

You can see we get an empty array when nosotros use the User.all command on the console. Permit's get back to the sign-upwardly form and... sign-upward.

image

After clicking on the Sign-Up button, we are sent back to the root route. This is the intended behaviour. Let's go check the console again and see what we go when we search for all of the users. We should only get one user and it sould be mister foo bar.

image

Did y'all notice something? The proper noun and surname fields on the user tape were not saved. This is considering nosotros need to explicitly tell rails to accept these ii fields in the course. Permit's become do that now. On the controllers folder, open the application_controller.rb file and update it so it looks similar this.

                                                      form                    ApplicationController                    < ActionController::Base                  protect_from_forgery                  with:                  :exception                  before_action                  :update_allowed_parameters,                  if:                  :devise_controller?                  protected                                      def                    update_allowed_parameters                                    devise_parameter_sanitizer.permit(:sign_up) {                  |u|                  u.permit(:proper noun,                  :surname,                  :electronic mail,                  :countersign)}     devise_parameter_sanitizer.permit(:account_update) {                  |u|                  u.permit(:proper noun,                  :surname,                  :email,                  :countersign,                  :current_password)}                  stop                  end                              

Let me go to the console and erase the starting time user from there. Now let'due south test this once more, after the changes, nosotros should be able to sign-up and have all of our user fields inserted in the database.

image

I'm using the same credentials every bit terminal fourth dimension. Over again, I already erased the outset mister foo bar from the database and then it shouldn't be a problem. Now let's click Sign Up and bank check the database on the panel.

image

We got it now.

Congratulations, you lot now know how to install devise in your applications, add a model with devise, add some fields to those models and customize devise's views. You can now continue with the residue of your web awarding.

Thanks for reading!

Tags

# ruby-on-rails# crimson# devise# rubygems# authentication# latest-tech-stories# using-devise-on-ruby-on-rails# ruby-on-rails-elevation-story

Related Stories

strunkclevestimen.blogspot.com

Source: https://hackernoon.com/using-devise-in-your-ruby-on-rails-application-a-step-by-step-guide-m92i3y5s

Post a Comment for "How Do You Know Your Merch Application Was Sent"