Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Can log in and log out through Github

* Also can edit users
* Also generated devise views to customize them
  • Loading branch information...
commit dd59e5708a22e9f9190eab3f489ab8be85e664e2 1 parent 43007c5
Joe Peck authored
View
5 app/controllers/omniauth_callbacks_controller.rb
@@ -1,9 +1,12 @@
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def all
user = User.from_omniauth(request.env["omniauth.auth"])
+
if user.persisted?
- sign_in_and_redirect user, notice: "Welcome to TempTD, home of TempTD"
+ flash[:notice] = "Welcome to TempTD, home of TempTD"
+ sign_in_and_redirect user
else
+ session["devise.user_attributes"] = user.attributes
redirect_to new_user_registration_url
end
end
View
39 app/models/user.rb
@@ -1,6 +1,5 @@
class User < ActiveRecord::Base
has_many :votes
- validates_presence_of :email
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
@@ -8,13 +7,20 @@ class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
# Setup accessible (or protected) attributes for your model
- attr_accessible :email, :password, :password_confirmation, :remember_me, :nickname, :provider, :uid
+ attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :nickname, :provider, :uid
+
+ def to_s
+ username
+ end
def self.new_with_session(params, session)
- super.tap do |user|
- if data = session["devise.github_data"] && session["devise.github_data"]["extra"]["raw_info"]
- user.email = data["email"] if user.email.blank?
+ if session["devise.user_attributes"]
+ new(session["devise.user_attributes"], without_protection: true) do |user|
+ user.attributes = params
+ user.valid?
end
+ else
+ super
end
end
@@ -26,16 +32,15 @@ def self.from_omniauth(auth)
end
end
- # def self.find_for_github_oauth(auth, signed_in_resource=nil)
- # user = User.where(:provider => auth.provider, :uid => auth.uid).first
- # unless user
- # user = User.create(nickname:auth.extra.raw_info.name,
- # provider:auth.provider,
- # uid:auth.uid,
- # email:auth.info.email,
- # password:Devise.friendly_token[0,20]
- # )
- # end
- # user
- # end
+ def password_required?
+ super && provider.blank?
+ end
+
+ def update_with_password(params, *options)
+ if encrypted_password.blank?
+ update_attributes(params, *options)
+ else
+ super
+ end
+ end
end
View
12 app/views/devise/confirmations/new.html.erb
@@ -0,0 +1,12 @@
+<h2>Resend confirmation instructions</h2>
+
+<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %>
+ <%= devise_error_messages! %>
+
+ <div><%= f.label :email %><br />
+ <%= f.email_field :email, :autofocus => true %></div>
+
+ <div><%= f.submit "Resend confirmation instructions" %></div>
+<% end %>
+
+<%= render "devise/shared/links" %>
View
5 app/views/devise/mailer/confirmation_instructions.html.erb
@@ -0,0 +1,5 @@
+<p>Welcome <%= @email %>!</p>
+
+<p>You can confirm your account email through the link below:</p>
+
+<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>
View
8 app/views/devise/mailer/reset_password_instructions.html.erb
@@ -0,0 +1,8 @@
+<p>Hello <%= @resource.email %>!</p>
+
+<p>Someone has requested a link to change your password. You can do this through the link below.</p>
+
+<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
+
+<p>If you didn't request this, please ignore this email.</p>
+<p>Your password won't change until you access the link above and create a new one.</p>
View
7 app/views/devise/mailer/unlock_instructions.html.erb
@@ -0,0 +1,7 @@
+<p>Hello <%= @resource.email %>!</p>
+
+<p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>
+
+<p>Click the link below to unlock your account:</p>
+
+<p><%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %></p>
View
16 app/views/devise/passwords/edit.html.erb
@@ -0,0 +1,16 @@
+<h2>Change your password</h2>
+
+<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
+ <%= devise_error_messages! %>
+ <%= f.hidden_field :reset_password_token %>
+
+ <div><%= f.label :password, "New password" %><br />
+ <%= f.password_field :password, :autofocus => true %></div>
+
+ <div><%= f.label :password_confirmation, "Confirm new password" %><br />
+ <%= f.password_field :password_confirmation %></div>
+
+ <div><%= f.submit "Change my password" %></div>
+<% end %>
+
+<%= render "devise/shared/links" %>
View
12 app/views/devise/passwords/new.html.erb
@@ -0,0 +1,12 @@
+<h2>Forgot your password?</h2>
+
+<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
+ <%= devise_error_messages! %>
+
+ <div><%= f.label :email %><br />
+ <%= f.email_field :email, :autofocus => true %></div>
+
+ <div><%= f.submit "Send me reset password instructions" %></div>
+<% end %>
+
+<%= render "devise/shared/links" %>
View
31 app/views/devise/registrations/edit.html.erb
@@ -0,0 +1,31 @@
+<h2>Edit <%= resource_name.to_s.humanize %></h2>
+
+<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
+ <%= devise_error_messages! %>
+
+ <div><%= f.label :email %><br />
+ <%= f.email_field :email, :autofocus => true %></div>
+
+ <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
+ <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
+ <% end %>
+
+ <% if f.object.encrypted_password.present? %>
+ <div><%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
+ <%= f.password_field :password, :autocomplete => "off" %></div>
+
+ <div><%= f.label :password_confirmation %><br />
+ <%= f.password_field :password_confirmation %></div>
+
+ <div><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
+ <%= f.password_field :current_password %></div>
+ <% end %>
+
+ <div><%= f.submit "Update" %></div>
+<% end %>
+
+<h3>Cancel my account</h3>
+
+<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete %>.</p>
+
+<%= link_to "Back", :back %>
View
23 app/views/devise/registrations/new.html.erb
@@ -0,0 +1,23 @@
+<h2>Sign up</h2>
+
+<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
+ <%= devise_error_messages! %>
+
+ <div><%= f.label :email %><br />
+ <%= f.email_field :email, :autofocus => true %></div>
+
+ <div><%= f.label :username %><br />
+ <%= f.text_field :username %></div>
+
+ <% if f.object.password_required? %>
+ <div><%= f.label :password %><br />
+ <%= f.password_field :password %></div>
+
+ <div><%= f.label :password_confirmation %><br />
+ <%= f.password_field :password_confirmation %></div>
+ <% end %>
+
+ <div><%= f.submit "Sign up" %></div>
+<% end %>
+
+<%= render "devise/shared/links" %>
View
17 app/views/devise/sessions/new.html.erb
@@ -0,0 +1,17 @@
+<h2>Sign in</h2>
+
+<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
+ <div><%= f.label :email %><br />
+ <%= f.email_field :email, :autofocus => true %></div>
+
+ <div><%= f.label :password %><br />
+ <%= f.password_field :password %></div>
+
+ <% if devise_mapping.rememberable? -%>
+ <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
+ <% end -%>
+
+ <div><%= f.submit "Sign in" %></div>
+<% end %>
+
+<%= render "devise/shared/links" %>
View
25 app/views/devise/shared/_links.erb
@@ -0,0 +1,25 @@
+<%- if controller_name != 'sessions' %>
+ <%= link_to "Sign in", new_session_path(resource_name) %><br />
+<% end -%>
+
+<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
+ <%= link_to "Sign up", new_registration_path(resource_name) %><br />
+<% end -%>
+
+<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
+ <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
+<% end -%>
+
+<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
+ <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
+<% end -%>
+
+<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
+ <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
+<% end -%>
+
+<%- if devise_mapping.omniauthable? %>
+ <%- resource_class.omniauth_providers.each do |provider| %>
+ <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
+ <% end -%>
+<% end -%>
View
12 app/views/devise/unlocks/new.html.erb
@@ -0,0 +1,12 @@
+<h2>Resend unlock instructions</h2>
+
+<%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %>
+ <%= devise_error_messages! %>
+
+ <div><%= f.label :email %><br />
+ <%= f.email_field :email, :autofocus => true %></div>
+
+ <div><%= f.submit "Resend unlock instructions" %></div>
+<% end %>
+
+<%= render "devise/shared/links" %>
View
8 app/views/layouts/application.html.erb
@@ -7,7 +7,13 @@
<%= csrf_meta_tags %>
</head>
<body>
- <p><%= link_to "Sign in with Github", user_omniauth_authorize_path(:github) %></p>
+ <% if current_user %>
+ <strong><%= current_user %></strong>.
+ <%= link_to 'Edit profile', edit_user_registration_path %> |
+ <%= link_to "Logout", destroy_user_session_path %>
+ <% else %>
+ <p><%= link_to "Sign in with Github", user_omniauth_authorize_path(:github) %></p>
+ <% end %>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
View
2  config/initializers/devise.rb
@@ -203,7 +203,7 @@
# config.navigational_formats = ["*/*", :html]
# The default HTTP method used to sign out a resource. Default is :delete.
- config.sign_out_via = :delete
+ config.sign_out_via = :get
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
Please sign in to comment.
Something went wrong with that request. Please try again.