Add login via Mozilla Persona
parent
769acb6593
commit
8c43aaf081
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
@ -0,0 +1,28 @@
|
||||
$ ->
|
||||
$('#persona-button').click (event) ->
|
||||
event.preventDefault()
|
||||
navigator.id.request { siteName: window.location.hostname }
|
||||
|
||||
if window.browserIdUser
|
||||
$('.session-info .logout').click (event) ->
|
||||
event.preventDefault()
|
||||
navigator.id.logout()
|
||||
|
||||
navigator.id.watch
|
||||
loggedInUser: window.browserIdUser
|
||||
|
||||
onlogin: (assertion) ->
|
||||
console.log 'onlogin'
|
||||
|
||||
if assertion
|
||||
form = $(
|
||||
"<form action='/auth/browser_id/callback'>" +
|
||||
"<input type='hidden' name='assertion' value='#{assertion}' />"
|
||||
)
|
||||
|
||||
$('body').append form
|
||||
form.submit()
|
||||
|
||||
onlogout: ->
|
||||
console.log 'onlogout'
|
||||
window.location = '/logout'
|
@ -1,36 +0,0 @@
|
||||
class OmniAuthUserLoader
|
||||
|
||||
def initialize(app)
|
||||
@app = app
|
||||
end
|
||||
|
||||
def call(env)
|
||||
omniauth = env['omniauth.auth']
|
||||
|
||||
if omniauth
|
||||
env['asciiio.user'] = find_user(omniauth) || build_user(omniauth)
|
||||
end
|
||||
|
||||
@app.call(env)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_user(omniauth)
|
||||
query = { :provider => omniauth['provider'], :uid => omniauth['uid'].to_s }
|
||||
|
||||
User.where(query).first
|
||||
end
|
||||
|
||||
def build_user(omniauth)
|
||||
user = User.new
|
||||
user.provider = omniauth['provider']
|
||||
user.uid = omniauth['uid']
|
||||
user.nickname = omniauth['info']['nickname']
|
||||
user.name = omniauth['info']['name']
|
||||
user.avatar_url = OmniAuthHelper.get_avatar_url(omniauth)
|
||||
|
||||
user
|
||||
end
|
||||
|
||||
end
|
@ -1,63 +0,0 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe OmniAuthUserLoader do
|
||||
let(:middleware) { OmniAuthUserLoader.new(app) }
|
||||
let(:app) { double('app', :call => nil) }
|
||||
|
||||
describe '#call' do
|
||||
let(:env) { { :path => '/foo' } }
|
||||
|
||||
subject { env['asciiio.user'] }
|
||||
|
||||
before do
|
||||
OmniAuth.config.mock_auth[:twitter] = omniauth
|
||||
env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
|
||||
end
|
||||
|
||||
context "when there's no omniauth hash" do
|
||||
let(:omniauth) { nil }
|
||||
|
||||
before do
|
||||
middleware.call(env)
|
||||
end
|
||||
|
||||
it { should be(nil) }
|
||||
end
|
||||
|
||||
context "when the omniauth hash is present" do
|
||||
let(:omniauth) { {
|
||||
"provider" => 'twitter',
|
||||
"uid" => 1234,
|
||||
"info" => {
|
||||
"nickname" => 'quux',
|
||||
"name" => 'Quux'
|
||||
}
|
||||
} }
|
||||
|
||||
context "user exists" do
|
||||
let!(:user) { create(:user, :provider => 'twitter', :uid => 1234) }
|
||||
|
||||
before do
|
||||
middleware.call(env)
|
||||
end
|
||||
|
||||
it { should eq(user) }
|
||||
end
|
||||
|
||||
context "user doesn't exist" do
|
||||
before do
|
||||
allow(OauthHelper).to receive(:get_avatar_url) { 'http://a.eu/1.jpg' }
|
||||
middleware.call(env)
|
||||
end
|
||||
|
||||
it { should be_new_record }
|
||||
|
||||
its(:provider) { should eq('twitter') }
|
||||
its(:uid) { should eq(1234) }
|
||||
its(:nickname) { should eq('quux') }
|
||||
its(:name) { should eq('Quux') }
|
||||
its(:avatar_url) { should eq('http://a.eu/1.jpg') }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue