Implement working mailer and controller
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Place all the behaviors and hooks related to the matching controller here.
|
||||
# All this logic will automatically be available in application.js.
|
||||
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
||||
@@ -0,0 +1,3 @@
|
||||
// Place all the styles related to the password_resets controller here.
|
||||
// They will automatically be included in application.css.
|
||||
// You can use Sass (SCSS) here: http://sass-lang.com/
|
||||
@@ -0,0 +1,29 @@
|
||||
class PasswordResetsController < ApplicationController
|
||||
skip_before_filter :authenticated, :only => [:reset_password]
|
||||
|
||||
def reset_password
|
||||
token = params[:token] unless params[:token].nil?
|
||||
|
||||
if token && is_valid?(token)
|
||||
flash[:success] = "Password reset token confirmed! Please create a new password."
|
||||
#redirect_to :reset_password
|
||||
else
|
||||
flash[:error] = "Invalid password reset token. Please try again."
|
||||
redirect_to :login
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def is_valid?(token)
|
||||
if token =~ /(?<user_id>\d+)-(?<email_hash>[A-Z0-9]{32})/i
|
||||
|
||||
# Fetch the user by their id, and hash their email address
|
||||
user = User.find_by_id($~[:user_id])
|
||||
email = Digest::MD5.hexdigest(user.email)
|
||||
|
||||
# Compare and validate our hashes
|
||||
return true if email == $~[:email_hash]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,2 @@
|
||||
module PasswordResetsHelper
|
||||
end
|
||||
@@ -3,6 +3,8 @@ class UserMailer < ActionMailer::Base
|
||||
|
||||
def forgot_password(email, token)
|
||||
@token = token
|
||||
mail(to: "#{email}", subject: "Reset your RailsGoat password")
|
||||
@url = url_for(controller: "password_resets", action: "reset_password", only_path: false) + "?token=#{token}"
|
||||
|
||||
mail(to: "#{email}", subject: "Reset your MetaCorp password")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<div class="row-fluid">
|
||||
<h2 align="center">MetaCorp</h2>
|
||||
<h3 align="center">A GoatGroup Company</h3>
|
||||
<div class="span12">
|
||||
<div class="row-fluid">
|
||||
<div class="span4 offset4">
|
||||
|
||||
<!-- TODO -->
|
||||
<!-- Create a form that allows a user to reset their password -->
|
||||
<!-- This form is just a placeholder with no working functionality -->
|
||||
|
||||
<div class="signup">
|
||||
<%= form_tag "reset_passwords", :class=> "signup-wrapper" do %>
|
||||
|
||||
<div class="header">
|
||||
<h2>Create Password</h2>
|
||||
<p>Fill out the form below to create a new password.</p>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<%= label_tag "Enter Password" %>
|
||||
<%= password_field_tag :password, params[:password], {:class => "input input-block-level"} %>
|
||||
<%= label_tag "Confirm Password" %>
|
||||
<%= password_field_tag :confirm_password, params[:confirm_password], {:class => "input input-block-level"} %>
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
<%= submit_tag "Create Password", {:class => "btn btn-danger btn-large"} %>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -6,8 +6,17 @@
|
||||
<body>
|
||||
<h1>Need help logging in?</h1>
|
||||
<p>
|
||||
To reset your RailsGoat password, simply click on the
|
||||
following link and follow the instructions: <%= @token %>.<br/>
|
||||
A password reset was requested for your user account.<br>
|
||||
<br>
|
||||
|
||||
To reset your MetaCorp password, simply click on the
|
||||
following link and follow the instructions:<br>
|
||||
<br>
|
||||
|
||||
<%= link_to "Click here to reset your password", @url %><br>
|
||||
<br>
|
||||
|
||||
If you don't want to change your password, you can ignore this email.
|
||||
</p>
|
||||
<p>Thanks, and have a great day!</p>
|
||||
</body>
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
Need help logging in?
|
||||
==========================================================
|
||||
|
||||
To reset your RailsGoat password, simply click on the
|
||||
following link and follow the instructions: <%= @token %>.
|
||||
A password reset was requested for your user account.
|
||||
|
||||
To reset your MetaCorp password, simply copy the
|
||||
following link and follow the instructions:
|
||||
|
||||
<%= @url %>
|
||||
|
||||
If you don't want to change your password, you can ignore this email.
|
||||
|
||||
Thanks, and have a great day!
|
||||
@@ -19,7 +19,7 @@
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
<%= submit_tag "Send Forgot Password Email", {:class => "btn btn-danger btn-large"} %>
|
||||
<%= submit_tag "Reset Password", {:class => "btn btn-danger btn-large"} %>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
|
||||
@@ -38,6 +38,7 @@ Railsgoat::Application.configure do
|
||||
# ActionMailer settings for email support
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
|
||||
config.action_mailer.default_url_options = { :host => "localhost:3000" }
|
||||
|
||||
config.middleware.insert_before(
|
||||
Rack::Lock, Rack::LiveReload,
|
||||
|
||||
+1
-1
@@ -4,9 +4,9 @@ Railsgoat::Application.routes.draw do
|
||||
get "signup" => "users#new"
|
||||
get "logout" => "sessions#destroy"
|
||||
match "forgot_password" => "users#forgot_password"
|
||||
match "password_resets" => "password_resets#reset_password"
|
||||
|
||||
resources :sessions do
|
||||
|
||||
end
|
||||
|
||||
resources :users do
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe PasswordResetsController do
|
||||
|
||||
describe "GET 'new'" do
|
||||
it "returns http success" do
|
||||
get 'new'
|
||||
response.should be_success
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
require 'spec_helper'
|
||||
|
||||
# Specs in this file have access to a helper object that includes
|
||||
# the PasswordResetsHelper. For example:
|
||||
#
|
||||
# describe PasswordResetsHelper do
|
||||
# describe "string concat" do
|
||||
# it "concats two strings with spaces" do
|
||||
# expect(helper.concat_strings("this","that")).to eq("this that")
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
describe PasswordResetsHelper do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe "password_resets/new.html.erb" do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
||||
Reference in New Issue
Block a user