Merge branch 'master' of bitbucket.org:jamkazam/jam-web

This commit is contained in:
Brian Smith 2012-11-15 21:10:40 -05:00
commit 9f7f19c7c2
11 changed files with 87 additions and 13 deletions

View File

@ -25,6 +25,10 @@ gem 'eventmachine'
gem 'amqp'
gem 'logging-rails', :require => 'logging/rails'
gem 'tire'
gem 'rb-readline'
gem 'omniauth'
gem 'omniauth-facebook'
gem 'fb_graph'
gem 'sendgrid'
gem 'recaptcha'

View File

@ -4,6 +4,7 @@ class SessionsController < ApplicationController
def new
end
def create
user = User.authenticate(params[:session][:email], params[:session][:password])
@ -11,13 +12,62 @@ class SessionsController < ApplicationController
flash.now[:error] = 'Invalid email/password combination'
render 'new'
else
sign_in user
redirect_back_or music_sessions_url
complete_sign_in user
end
end
# OAuth docs
# http://net.tutsplus.com/tutorials/ruby/how-to-use-omniauth-to-authenticate-your-users/
def create_oauth
auth_hash = request.env['omniauth.auth']
authorization = UserAuthorization.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"])
if authorization
# Sign in for a user who has already registered.
complete_sign_in authorization.user
else
# Sign up for a completely new user.
# First/last name: auth_hash["info"]["first_name"] and auth_hash["info"]["last_name"]
# token: auth_hash["credentials"]["token"] -- "expires_at"
#
# For debugging - to see what all is there:
# render :text => auth_hash.to_yaml
#FbGraph.debug!
#app = FbGraph::Application.new '468555793186398', :secret => '546a5b253972f3e2e8b36d9a3dd5a06e'
token = auth_hash[:credentials][:token]
# FIXME:
# This should probably be in a transaction somehow, meaning the user
# create and the authorization create. Concern is UserManager.new.signup sends
# an email and whatnot.
user = UserManager.new.signup(auth_hash[:info][:first_name],
auth_hash[:info][:last_name],
auth_hash[:info][:email],
nil,
nil,
auth_hash[:info][:location],
nil, # state
nil, # @country
nil,
nil)
auth = user.user_authorizations.build :provider => auth_hash[:provider], :uid => auth_hash[:uid],
:token => auth_hash[:credentials][:token], :token_expiration => Time.at(auth_hash[:credentials][:expires_at])
user.save
auth.save
complete_sign_in user
end
end
def complete_sign_in(user)
sign_in user
redirect_back_or music_sessions_url
end
def destroy
sign_out
redirect_to root_url
end
end
def failure
end
end

View File

@ -18,8 +18,6 @@ class UsersController < ApplicationController
end
def create
@user = User.new
# check recaptcha; if any errors seen, contribute it to the model

View File

@ -7,6 +7,6 @@ module UsersHelper
hclass = options[:hclass]
gravatar =
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class: "#{hclass}")
image_tag(gravatar_url, alt: "#{user.first_name} #{user.last_name}", class: "#{hclass}")
end
end

View File

View File

@ -21,7 +21,7 @@
<li>
<a>
<img src="{image}"/>
<span class="text">{name}</span>
<span class="text">{first_name} {last_name}</span>
<span class="subtext">{subtext}</span>
</a>
</li>
@ -30,7 +30,7 @@
<div class="userinfo">
<%= gravatar_for current_user, size: 52, hclass: "avatar medium" %>
<div class="username">
<h2><%= current_user.name %></h2>
<h2><%= "#{current_user.first_name} #{current_user.last_name}" %></h2>
<%= image_tag "down_arrow.png", :class=> "profile-toggle" %>
<ul>
<li><a layout-link="account">Profile</a></li>

View File

@ -1,6 +1,12 @@
<% provide(:title, "Sign in") %>
<h1>Sign in</h1>
<div class="row">
<div class="span6 offset3">
<a href="/auth/facebook"><img src="/fb-signup-button.png"></a>
</div>
</div>
<div class="row">
<div class="span6 offset3">
<%= form_for(:session, url: sessions_path) do |f| %>
@ -16,4 +22,4 @@
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
</div>

View File

@ -1,12 +1,21 @@
<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
<div class="span6 offset3">
<a href="/auth/facebook"><img src="/fb-signup-button.png"></a>
</div>
</div>
<div class="row">
<div class="span6 offset3">
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :first_name %>
<%= f.text_field :first_name %>
<%= f.label :last_name %>
<%= f.text_field :last_name %>
<%= f.label :email %>
<%= f.text_field :email %>
@ -31,4 +40,4 @@
<%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
</div>

View File

@ -0,0 +1,3 @@
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, '468555793186398', '546a5b253972f3e2e8b36d9a3dd5a06e', {:scope => 'email,user_location'}
end

View File

@ -17,6 +17,9 @@ SampleApp::Application.routes.draw do
match '/email_sent', to: 'users#email_sent'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
# oauth
match '/auth/:provider/callback', :to => 'sessions#create_oauth'
match '/auth/failure', :to => 'sessions#failure'
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'

View File

@ -14,6 +14,7 @@ class UserManager < BaseManager
@user = User.new
# TODO: figure out why can't user verify_recaptcha here
# ALSO: make sure we dont do the recaptcha stuff if used facebook.
# check recaptcha; if any errors seen, contribute it to the model
#unless verify_recaptcha(:model => @user, :message => "recaptcha")
@ -37,4 +38,4 @@ class UserManager < BaseManager
return @user
end
end
end