Add Devise for users

This commit is contained in:
Erik Michaels-Ober 2011-03-05 21:21:52 -08:00
parent fe45f4eaa3
commit d3dd6fbac3
15 changed files with 247 additions and 48 deletions

View File

@ -1,7 +1,8 @@
source 'http://rubygems.org'
gem 'rails', '3.0.5'
gem 'rails'
gem 'geokit'
gem 'devise'
group :development do
gem 'pg'

View File

@ -29,7 +29,11 @@ GEM
activesupport (= 3.0.5)
activesupport (3.0.5)
arel (2.0.9)
bcrypt-ruby (2.1.4)
builder (2.1.2)
devise (1.1.7)
bcrypt-ruby (~> 2.1.2)
warden (~> 1.0.2)
erubis (2.6.6)
abstract (>= 1.0.0)
geokit (1.5.0)
@ -66,12 +70,15 @@ GEM
treetop (1.4.9)
polyglot (>= 0.3.1)
tzinfo (0.3.24)
warden (1.0.3)
rack (>= 1.0.0)
PLATFORMS
ruby
DEPENDENCIES
devise
geokit
pg
rails (= 3.0.5)
rails
sqlite3

View File

@ -1,22 +0,0 @@
class UsersController < ApplicationController
def sign_up
@data = {"email" => params[:email], "name" => params[:name]}
respond_to do |format|
format.json{render :json => @data}
end
end
def sign_in
@data = {"email" => params[:email]}
respond_to do |format|
format.json{render :json => @data}
end
end
def forgot_password
@data = {"email" => params[:email]}
respond_to do |format|
format.json{render :json => @data}
end
end
end

View File

@ -0,0 +1,2 @@
module SessionsHelper
end

View File

@ -1,3 +1,5 @@
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
has_many :hydrants
end

View File

@ -22,5 +22,7 @@ AdoptAHydrant::Application.configure do
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
end

View File

@ -46,4 +46,6 @@ AdoptAHydrant::Application.configure do
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
end

View File

@ -32,4 +32,6 @@ AdoptAHydrant::Application.configure do
# Print deprecation notices to the stderr
config.active_support.deprecation = :stderr
config.action_mailer.default_url_options = { :host => 'adopt-a-hydrant.heroku.com' }
end

View File

@ -0,0 +1,142 @@
# Use this hook to configure devise mailer, warden hooks and so forth. The first
# four configuration values can also be set straight in your models.
Devise.setup do |config|
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in DeviseMailer.
config.mailer_sender = "please-change-me@config-initializers-devise.com"
# Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer"
# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and
# :mongoid (bson_ext recommended) by default. Other ORMs may be
# available as additional gems.
require 'devise/orm/active_record'
# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating an user. By default is
# just :email. You can configure it to use [:username, :subdomain], so for
# authenticating an user, both parameters are required. Remember that those
# parameters are used only when authenticating and not when retrieving from
# session. If you need permissions, you should implement that in a before filter.
# config.authentication_keys = [ :email ]
# Tell if authentication through request.params is enabled. True by default.
# config.params_authenticatable = true
# Tell if authentication through HTTP Basic Auth is enabled. False by default.
# config.http_authenticatable = false
# Set this to true to use Basic Auth for AJAX requests. True by default.
# config.http_authenticatable_on_xhr = true
# The realm used in Http Basic Authentication
# config.http_authentication_realm = "Application"
# ==> Configuration for :database_authenticatable
# For bcrypt, this is the cost for hashing the password and defaults to 10. If
# using other encryptors, it sets how many times you want the password re-encrypted.
config.stretches = 10
# Define which will be the encryption algorithm. Devise also supports encryptors
# from others authentication tools as :clearance_sha1, :authlogic_sha512 (then
# you should set stretches above to 20 for default behavior) and :restful_authentication_sha1
# (then you should set stretches to 10, and copy REST_AUTH_SITE_KEY to pepper)
config.encryptor = :bcrypt
# Setup a pepper to generate the encrypted password.
config.pepper = "d0ce05a602094357144e8d2ce90258904f8cb26fb943cefd6fe0b824752616a9254fadabed3a47ba5c0de66a359513768ab1ab233d9cfef893f376a9b5ebcf68"
# ==> Configuration for :confirmable
# The time you want to give your user to confirm his account. During this time
# he will be able to access your application without confirming. Default is nil.
# When confirm_within is zero, the user won't be able to sign in without confirming.
# You can use this to let your user access some features of your application
# without confirming the account, but blocking it after a certain period
# (ie 2 days).
# config.confirm_within = 2.days
# ==> Configuration for :rememberable
# The time the user will be remembered without asking for credentials again.
# config.remember_for = 2.weeks
# If true, a valid remember token can be re-used between multiple browsers.
# config.remember_across_browsers = true
# If true, extends the user's remember period when remembered via cookie.
# config.extend_remember_period = false
# ==> Configuration for :validatable
# Range for password length
# config.password_length = 6..20
# Regex to use to validate the email address
# config.email_regexp = /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again.
# config.timeout_in = 10.minutes
# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
# :none = No lock strategy. You should handle locking by yourself.
# config.lock_strategy = :failed_attempts
# Defines which strategy will be used to unlock an account.
# :email = Sends an unlock link to the user email
# :time = Re-enables login after a certain amount of time (see :unlock_in below)
# :both = Enables both strategies
# :none = No unlock strategy. You should handle unlocking by yourself.
# config.unlock_strategy = :both
# Number of authentication tries before locking an account if lock_strategy
# is failed attempts.
# config.maximum_attempts = 20
# Time interval to unlock the account if :time is enabled as unlock_strategy.
# config.unlock_in = 1.hour
# ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key
# config.token_authentication_key = :auth_token
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = true
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes.
# config.default_scope = :user
# Configure sign_out behavior.
# By default sign_out is scoped (i.e. /users/sign_out affects only :user scope).
# In case of sign_out_all_scopes set to true any logout action will sign out all active scopes.
# config.sign_out_all_scopes = false
# ==> Navigation configuration
# Lists the formats that should be treated as navigational. Formats like
# :html, should redirect to the sign in page when the user does not have
# access, but formats like :xml or :json, should return 401.
# If you have any extra navigational formats, like :iphone or :mobile, you
# should add them to the navigational formats lists. Default is [:html]
# config.navigational_formats = [:html, :iphone]
# ==> Warden configuration
# If you want to use other strategies, that are not (yet) supported by Devise,
# you can configure them inside the config.warden block. The example below
# allows you to setup OAuth, using http://github.com/roman/warden_oauth
#
# config.warden do |manager|
# manager.oauth(:twitter) do |twitter|
# twitter.consumer_secret = <YOUR CONSUMER SECRET>
# twitter.consumer_key = <YOUR CONSUMER KEY>
# twitter.options :site => 'http://twitter.com'
# end
# manager.default_strategies(:scope => :user).unshift :twitter_oauth
# end
end

View File

@ -0,0 +1,39 @@
en:
errors:
messages:
not_found: "not found"
already_confirmed: "was already confirmed"
not_locked: "was not locked"
devise:
failure:
unauthenticated: 'You need to sign in or sign up before continuing.'
unconfirmed: 'You have to confirm your account before continuing.'
locked: 'Your account is locked.'
invalid: 'Invalid email or password.'
invalid_token: 'Invalid authentication token.'
timeout: 'Your session expired, please sign in again to continue.'
inactive: 'Your account was not activated yet.'
sessions:
signed_in: 'Signed in successfully.'
signed_out: 'Signed out successfully.'
passwords:
send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.'
updated: 'Your password was changed successfully. You are now signed in.'
confirmations:
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
confirmed: 'Your account was successfully confirmed. You are now signed in.'
registrations:
signed_up: 'You have signed up successfully. If enabled, a confirmation was sent to your e-mail.'
updated: 'You updated your account successfully.'
destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.'
unlocks:
send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.'
unlocked: 'Your account was successfully unlocked. You are now signed in.'
mailer:
confirmation_instructions:
subject: 'Confirmation instructions'
reset_password_instructions:
subject: 'Reset password instructions'
unlock_instructions:
subject: 'Unlock Instructions'

View File

@ -1,6 +1,4 @@
AdoptAHydrant::Application.routes.draw do
post "/sign_up.:format" => "users#sign_up", :as => "sign_up"
post "/sign_in.:format" => "users#sign_in", :as => "sign_in"
post "/forgot_password.:format" => "users#forgot_password", :as => "forgot_password"
devise_for :users
root :to => "main#index"
end

View File

@ -1,15 +0,0 @@
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.timestamps
t.string :name
t.integer :voice_number
t.integer :sms_number
t.string :email
end
end
def self.down
drop_table :users
end
end

View File

@ -0,0 +1,23 @@
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.timestamps
t.string :name, :null => false
t.string :organization
t.string :email, :null => false
t.integer :voice_number
t.integer :sms_number
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
end
def self.down
drop_table :users
end
end

View File

@ -2,8 +2,9 @@ class CreateHydrants < ActiveRecord::Migration
def self.up
create_table :hydrants do |t|
t.timestamps
t.decimal :lat
t.decimal :lng
t.string :name
t.decimal :lat, :null => false
t.decimal :lng, :null => false
t.integer :city_id
t.integer :user_id
end

View File

@ -15,8 +15,9 @@ ActiveRecord::Schema.define(:version => 20110223180521) do
create_table "hydrants", :force => true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.decimal "lat"
t.decimal "lng"
t.string "name"
t.decimal "lat", :null => false
t.decimal "lng", :null => false
t.integer "city_id"
t.integer "user_id"
end
@ -26,10 +27,24 @@ ActiveRecord::Schema.define(:version => 20110223180521) do
create_table "users", :force => true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
t.string "name", :null => false
t.string "organization"
t.string "email", :default => "", :null => false
t.integer "voice_number"
t.integer "sms_number"
t.string "email"
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "password_salt", :default => "", :null => false
t.string "reset_password_token"
t.string "remember_token"
t.datetime "remember_created_at"
t.integer "sign_in_count", :default => 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
end