Combined sign in and registration page?
- by Ryan
This is somewhat against rails convention but I am trying to have one controller that manages both user session authentication and user registration. I am having troubles figuring out how to go about this.
So far I am merging the User Controller and the Sessions Controller and having the 'new' method deliver both a new usersession and a new user instance.
With the new routes in rails 3 though, I am having trouble figuring out how to generate forms for these items.
Below is the code:
user_controller.rb
class UserController < ApplicationController
def new
@user_session = UserSession.new
@user = User.new
end
def create_user
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Account Successfully Registered"
redirect_back_or_default signup_path
else
render :action => new
end
end
def create_session
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Login successful!"
redirect_back_or_default login_path
else
render :action => new
end
end
end
views/user/new.html.erb
<div id="login_section">
<% form_for @user_session do |f| -%>
<%= f.label :email_address, "Email Address" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.text_field :password %>
<%= f.submit "Login", :disable_with => 'Logining...' %>
<% end -%>
</div>
<div id="registration_section">
<% form_for @user do |f| -%>
<%= f.label :email_address, "Email Address" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.text_field :password %>
<%= f.label :password_confirmation, "Password Confirmation" %>
<%= f.text_field :password_confirmation %>
<%= f.submit "Register", :disable_with => 'Logining...' %>
<% end -%>
</div>
I imagine I will need to use :url = something for those forms, but I am unsure how to specify.
Within routes.rb I have yet to specify either Usersor UserSessions as resources (not convinced that this is the best way to do it... but I could be).
I would like, however, the registration and login on the same page and have implemented this by doing the following:
routes.rb
match 'signup' => 'user#new'
match 'login' => 'user#new'
What's the best way to go about solving this?