Hi all.
What I want to do:
use HTTP Basic Authentication (stop screaming!) and then redirect to a
welcome page.
What I am trying to do:
Use a before filter which will authenticate and then redirect to the
welcome page.
How I am failing (It''s a little ugly, but please bear with me -
I''m
trying to understand how this works):
class ApplicationController < ActionController::Base
  helper :all
  before_filter :authenticate
  protected
  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      user = User.first(:conditions => [''username like ? and
password
like ?'', username, password])
      redirect_to root_path and return unless user.nil?
      user
    end
  end
end
How it is failing:
  It tells me there''s a render and a redirect.
Can anyone suggest something here? Am I just .. Thinking about it the
wrong way?
-- 
Posted via http://www.ruby-forum.com/.
-- 
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Aldric Giacomoni wrote:> Hi all. > What I want to do: > use HTTP Basic Authentication (stop screaming!) and then redirect to a > welcome page.Is this an exercise for learning? If it''s not then why would you even consider solving this already solved problem. http://github.com/binarylogic/authlogic -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Robert Walker wrote:> Aldric Giacomoni wrote: >> Hi all. >> What I want to do: >> use HTTP Basic Authentication (stop screaming!) and then redirect to a >> welcome page. > > Is this an exercise for learning? If it''s not then why would you even > consider solving this already solved problem. > > http://github.com/binarylogic/authlogicYes.. Yes it is. I''d love to be using authlogic. :) -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hi,
You might want to check out this railscast tutorial 
(http://railscasts.com/episodes/82-http-basic-authentication).
The authenticate_or_request_with_http_basic method is expecting the 
block to return true or false and will send an auth required status if 
false. It should be ok to return the user object (ie the line after the 
redirect_to ...) as this should equate to true or false. I''m not sure 
what value it will return in the line ''redirect_to root_path and return
unless user.nil?''. There is also the problem that this before filter 
will endlessly redirect users to root_path, unless you''ve told it to
not
authenticate the root_path controller''s index action, which may be a 
security issue. You may want to set a session var on a successful 
authentication and then add an early out at the beginning if the session 
var is set, so the authentication and redirect_to is only done once. 
Then there''s other issues like only storing passwords in hashed form 
using a salt value etc. Maybe something like the following untested 
code.
def authenticate
  return unless session[:user_id].nil?
  authenticate_or_request_with_http_basic do |username, password|
    user = User.first(:conditions => [''username like ? and password
like
?'', username, password])
    if user
      session[:user_id] = user.id
      redirect_to root_path
      true
    else
      false
    end
  end
end
I hope this helps. I look forward to hearing how you go.
PS. There is nothing wrong with basic authentication if you''ve enabled 
SSL.
-- 
Posted via http://www.ruby-forum.com/.
-- 
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Brendan Brewster wrote:> Hi, > > > def authenticate > return unless session[:user_id].nil? > authenticate_or_request_with_http_basic do |username, password| > user = User.first(:conditions => [''username like ? and password like > ?'', username, password]) > if user > session[:user_id] = user.id > redirect_to root_path > true > else > false > end > end > end >Hi Brendan, I had indeed seen that railscasts episode. It helped, but didn''t say anything about the redirection. As far as your suggested code, it was exactly what the doctor ordered! Thanks for your help. I understand this a little better now. -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.