Jul 16

A Simple Twitter App with Ruby on Rails – User Authentication

This article is the second part in a three part series. In the first part we created some basic functionality to allow the user to post messages in a similar way to Twitter. If you have not completed the first part of this tutorial, please do so now.

In this instalment, we will learn how to add some basic user authentication using a useful plugin called nifty_generators. So lets get started!

Get the Gem!

Gems in A Simple Twitter App with Ruby on Rails - User Authentication

The nifty_generators gem was created by Ryan Bates, better known for his great RailsCast tutorials. It provides a useful generator for setting up user authentication in a few simple steps.

It’s worth noting that there are other tools for integrating authentication, for instance technoweenie’s Restful Authentication is very good. However, to keep things simple, we will stick with nifty_generators.

At a command prompt key the following command:-

  > gem install nifty-generators

Generating the Authentication

Authentication in A Simple Twitter App with Ruby on Rails - User Authentication

Now, make sure your current directory is set to the project folder of your Rails project and run the following commands:-

  > ruby script/generate nifty_authentication
  > ruby script/generate nifty_layout

The first command creates the relevant files for achieving authentication. The second command creates, among other things, a helper file which is required for some of the authentication view files to function correctly.

Don’t forget to migrate your database!

  > rake db:migrate

Making use of the Authentication Module

Make Use Of Auth in A Simple Twitter App with Ruby on Rails - User Authentication

Ok, so we now have the functionality, which is required for authenticating users, it’s just a matter of using it. First, we will create a partial allowing the user to sign up or login.

Create a file called “_login.html.erb” in the views/users folder and add the following code:

<% if logged_in? %>
  Welcome <%= current_user.username %>! Not you?
  <%= link_to "Log out", logout_path %>
<% else %>
  <%= link_to "Sign up", signup_path %> or
  <%= link_to "log in", login_path %>.

<% end %>

We will simply render the login partial in the “posts.html.erb” layout file (to keep things simple). This file is located in the views/layouts folder. Edit the file to include the “render” method call, as shown below.

.
.
<body>
  <div id="content">
    <p><%= render :partial => "users/login" %></p>

    <%= yield %>
  </div>
</body>
.
.

Further to this, we only want users to be able to post messages if they are logged in so change the “_message_form.html.erb” file, in the views/posts folder, to have the following condition:

<% if logged_in? %>

  <% form_remote_tag(:controller => "posts", :action => "create") do %>
    <%= label_tag(:message, "What are you doing?") %><br />
    <%= text_area_tag(:message, nil, :size => "60x2") %><br />
    <%= submit_tag("Update") %>

  <% end %>
<% end %>

Let’s Give it a Go!

Fire up the server.

  > ruby script/server

On the home page we now have “Sign up” and “Login” links.

Login Links in A Simple Twitter App with Ruby on Rails - User Authentication

You’ll also notice that you cannot post a message until you have a user account. So you will need to sign up first

Signup in A Simple Twitter App with Ruby on Rails - User Authentication

Then you can login…

Login in A Simple Twitter App with Ruby on Rails - User Authentication

Once you have logged in, you will be able to post messages again.

Loggedin in A Simple Twitter App with Ruby on Rails - User Authentication

View Demo of Twitter App with Ruby on Rails

Summary

In this tutorial, you have leanrt how to integrate authentication into your applications and how to make use of it. In the third and final part of this series you will learn how to add functionality, which allows users to follow other users.

Phil Mcclure Small in A Simple Twitter App with Ruby on Rails - User Authentication

Author: Phil McClure

Phil McClure is a Software Developer from Belfast, Northern Ireland. His main interests are software architecture, design patterns and how these can be applied to web development. Phil blogs at Therailworld. Follow him on Twitter.

Write for Us! We are looking for exciting and creative articles, if you want to contribute, just send us an email.

Tags: , ,

24 Responses, Add Comment +

  1. Nachtmeister 16 July 2009

    Looks good. Thanks for it!

  2. trice22 16 July 2009

    The headline is slightly misleading: This is rather a Twitter–like application.
    Reading this headline I had expected to find a tutorial on how to make use of the Twitter API, using RoR.

    Regards,
    trice

  3. insic 16 July 2009

    nice tut about user authentication in RoR. but I was expecting you are using the twitter API. :) this is not a twitter APP :)

  4. That’s a neat little application isn’t it?

  5. nice tut of ruby & twit, thanks for post..

  6. Premium Theme Info 16 July 2009

    Nice tutorial, it’s useful to me. I think it also should be useful to many readers!

  7. Gizelle 17 July 2009

    You are a genius!! This is very useful for someone like me who’s a poor coder.

  8. dupedb 19 July 2009

    Nice thanks. Was thinking about learning ruby a while back.

    (first comment on this site btw(for me)) :>

  9. GIm 20 July 2009

    Awesome one dude. Waiting for the third part :)

  10. ntiremedia 20 July 2009

    i am glad that i bumped in to you ppl i like the work here

  11. shaunjudy 28 July 2009

    This is a cool trick. Is more to come?

  12. clark 29 July 2009

    another great article form noupe, I am learning ruby on rails right now, this is great help

  13. maheshbalaji 1 August 2009

    its a great one im waiting for the next one

  14. Alex 9 August 2009

    Thanks a lot! Ruby on rails rocks!

  15. Niler Barcelos 9 September 2009

    great tutorial!!!

    thanks!!!!!!!

  16. subzcat 30 November 2009

    Thanks so much for this!

Trackbacks

Leave a Reply

Comments are moderated – and rel="nofollow" is in use. Please no link dropping, no keywords or domains as names; do not spam, and do not advertise!