Use the following source code for the indicated files:
---- LoginController/app/controllers/logins_controller.rb --------------------------
require 'digest/md5'
class LoginsController < ApplicationController
def new_login
end
def show_logins
end
def registration_confirmation
@login = Login.new
@login.user = params[:user]
pw_from_user = params[:pw]
confirm_from_user = params[:confirm_pw]
if pw_from_user != confirm_from_user
redirect_to logins_new_login_path,
notice: 'Password does not match confirmation.'
return
end
@login.password = Digest::MD5.hexdigest(pw_from_user)
if @login.save
@msg = 'New user was successfully registered.'
@all_logins = Login.all
else
if @login.errors.any?
cnt = @login.errors.count
error_messages = cnt.to_s + " " + "error".pluralize(cnt) +
" prohibited password from being created.\n"
@login.errors.full_messages.each do |msg|
error_messages += "--" + msg + ".\n"
end
end
redirect_to logins_new_login_path, notice: error_messages
return
end
end
def login_form
# User must login again when arriving at the login page,
# even if already logged in previously.
reset_session
# Get username and password
user_from_login = params[:user_from_login]
pw_from_login = params[:pw_from_login]
# Get password from database for entered username.
# If password from database matches the entered password,
# store true in session variable so user need not login again.
if !user_from_login.blank?
pw_array = Login.where(user: user_from_login)
encoded_pw = Digest::MD5.hexdigest(pw_from_login)
if pw_array.length > 0
pw_from_db = pw_array[0].password
if pw_from_db == encoded_pw
session[:logged_in] = true
redirect_to info_page1_path
end
end
end
end
def logout
# If user logs out from any page,
# reset session variable to false.
reset_session
# Go back to login again.
redirect_to logins_login_form_path
end
end
---- LoginController/app/views/logins/new_login.html.erb ---------------------------
<h1>Login Registration</h1>
<pre style="font-family: arial;">
<%= flash[:notice] %>
</pre>
<p><%= form_tag logins_registration_confirmation_path do %>
<table>
<tr>
<td class="r">Username</td>
<td><%= text_field_tag :user, '' %></td>
</tr>
<tr>
<td class="r">Password</td>
<td><%= password_field_tag :pw, '' %></td>
</tr>
<tr>
<td class="r">Confirmation</td>
<td><%= password_field_tag :confirm_pw, '' %></td>
</tr>
<tr>
<td> </td>
<td><%= submit_tag 'Register' %>
</tr>
</table>
<% end %></p>
---- LoginController/app/views/logins/registration_confirmation --------------------
<h2>Registration Confirmation</h2>
<p>New user registration confirmed.</p>
<p><%= link_to 'To Login Form', logins_login_form_path %></p>
<p><%= link_to 'Show All Logins', logins_show_logins_path %></p>
---- LoginController/app/views/logins/login_form.html.erb --------------------------
<h1>Login Form</h1>
<%= form_tag logins_login_form_path do %>
<table>
<tr>
<td style="text-align:right">Username:</td>
<td><%= text_field_tag :user_from_login, '' %></td>
</tr>
<tr>
<td style="text-align:right">Password:</td>
<td><%= password_field_tag :pw_from_login, '' %></td>
</tr>
<tr>
<td> </td>
<td><%= submit_tag 'Login' %></td>
</tr>
<table>
<% end %>
<p><%= link_to 'Register New User', logins_new_login_path %></p>
---- LoginController/app/views/logins/show_logins.html.erb -------------------------
<h1>Current Registered Users</h1>
<table>
<tr>
<td>User</td>
<td>Encrypted Password</td>
</tr>
<% Login.all.each do |login| %>
<tr>
<td><%= login.user %></td>
<td><%= login.password %></td>
</tr>
<% end %>
</table>
<p><%= link_to 'To Login Form', logins_login_form_path %></p>
---- LoginController/app/controllers/info_controller.rb ----------------------------
class InfoController < ApplicationController
def page1
end
private
def check_logged_in
if !session[:logged_in]
redirect_to logins_logins_form_path
end
end
end
---- LoginController/app/views/info/page1.html.erb ---------------------------------
<%= form_tag logins_logout_path, class: 'r' do %>
<%= submit_tag 'Logout' %>
<% end %>
<h1>Info Page</h1>
<p>This is the password protected page.</p>
---- LoginController/assets/stylesheets/application.css ----------------------------
.r { text-align: right }
---- LoginController/config/routes.rb ----------------------------------------------
Rails.application.routes.draw do
get 'logins/new_login'
get 'logins/registration_confirmation'
post 'logins/registration_confirmation'
get 'logins/login_form'
post 'logins/login_form'
get 'logins/show_logins'
post 'logins/show_logins'
get 'logins/logout'
post 'logins/logout'
get 'info/page1'
end