add users controller and intermediate username step

This commit is contained in:
Zachary Chai
2016-10-19 11:47:37 -04:00
parent d26d4a86bd
commit 015dd7cda4
10 changed files with 95 additions and 8 deletions

View File

@ -0,0 +1,7 @@
.user {
.description {
p {
font-size: 14px;
}
}
}

View File

@ -19,7 +19,7 @@ class LandingController < ApplicationController
@room_name = params[:name]
@user = User.find_by(username: @room_name)
@meeting_token = @room_name
@resource = params[:resource]
@resource = "rooms"
@resource_url = room_url(@meeting_token)
if @user.nil?
redirect_to root_path

View File

@ -1,8 +1,14 @@
class SessionsController < ApplicationController
def create
@user = User.from_omniauth(request.env['omniauth.auth'])
session[:user_id] = @user.id
redirect_to controller: 'landing', action: 'room', name: @user.username
if @user.persisted?
session[:user_id] = @user.id
redirect_to controller: 'landing', action: 'room', name: @user.username
else
@user.save!
session[:user_id] = @user.id
redirect_to controller: 'users', action: 'edit', id: @user.id
end
rescue => e
logger.error "Error authenticating via omniauth: #{e}"
redirect_to root_path

View File

@ -0,0 +1,31 @@
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update]
# GET /users/1/edit
def edit
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
if @user.update(user_params)
redirect_to controller: 'landing', action: 'room', name: @user.username
else
render :edit
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
if @user.username
raise ActionController::RoutingError.new('Not Found')
end
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:username)
end
end

View File

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

View File

@ -1,10 +1,13 @@
class User < ApplicationRecord
validates :username, uniqueness: true
def self.from_omniauth(auth_hash)
user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
user.name = auth_hash['info']['name']
user.save!
user = find_or_initialize_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
unless user.persisted?
# user.username = self.send("#{auth_hash['provider']}_username", auth_hash) rescue nil
user.name = auth_hash['info']['name']
end
user
end

View File

@ -0,0 +1,15 @@
<div class="col-sm-4 col-sm-offset-4">
<div class="jumbotron">
<h4>Enter Username below</h4>
<%= form_for(user, html: {class: "form-inline"}) do |f| %>
<div class="form-group">
<%= f.text_field :username, placeholder: "Username", class: "form-control input" %>
</div>
<%= f.submit class: "btn btn-success", value: "Save" %>
<% end %>
<div class="description">
<p>This username will be used to identify your personal room</p>
</div>
</div>
</div>

View File

@ -0,0 +1,3 @@
<div class="page-wrapper user edit">
<%= render 'form', user: @user %>
</div>