Hello everyone, I am just starting a project for school in RoR and I am a complete n00b ^^ Here''s my problem : I need to get the user''s login stored in the session but for some reason I cannot. Here''s my login method code : def login if request.post? @user = User.find_by_username(params[:login]) if @user and @user.password_is? params[:password] session[:user] = @user.id redirect_to :controller => ''games'' else @auth_error = ''Wrong username or password'' end end end And here''s the code of my GamesController. User needs to be logged in to access the games webpage (using check_auth method) and on that page the user can create a new game (adding a record in the game table, with a few fields from the form filled by the user and a field with the user''s username, that''s why I need to get it from session[:user]). before_filter :check_auth def check_auth unless session[:user] flash[:error] = ''You need to be logged in to access this panel'' redirect_to :controller => ''users'', :action => ''login'' end end def create @game = Game.new(params[:game]) @user = User.find(session[:user]) @game.host = @user.username respond_to do |format| if @game.save format.html { redirect_to(@game) } format.xml { render :xml => @game, :status => :created, :location => @game } else format.html { render :action => "new" } format.xml { render :xml => @game.errors, :status => :unprocessable_entity } end end end Thank you very much in advance for any help you could give, I really need to get this working to finish my project ^^ Blaede from Belgium --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
To understand how to require an user to log in to complete certain tasks, I would recomment you to read this excellent tutorial: http://www.railsforum.com/viewtopic.php?id=14216 Regards, Rey9999 On 30 Mag, 14:17, Blaede <n.naya...-AgBVmzD5pcezQB+pC5nmwQ@public.gmane.org> wrote:> Hello everyone, > > I am just starting a project for school in RoR and I am a complete > n00b ^^ > Here''s my problem : > > I need to get the user''s login stored in the session but for some > reason I cannot. > Here''s my login method code : > > def login > if request.post? > @user = User.find_by_username(params[:login]) > if @user and @user.password_is? params[:password] > session[:user] = @user.id > > redirect_to :controller => ''games'' > else > @auth_error = ''Wrong username or password'' > end > end > end > > And here''s the code of my GamesController. User needs to be logged in > to access the games webpage (using check_auth method) and on that > page the user can create a new game (adding a record in the game > table, > with a few fields from the form filled by the user and a field with > the user''s > username, that''s why I need to get it from session[:user]). > > before_filter :check_auth > > def check_auth > unless session[:user] > flash[:error] = ''You need to be logged in to access this panel'' > redirect_to :controller => ''users'', :action => ''login'' > end > end > > def create > @game = Game.new(params[:game]) > @user = User.find(session[:user]) > @game.host = @user.username > > respond_to do |format| > if @game.save > format.html { redirect_to(@game) } > format.xml { render :xml => @game, :status > => :created, :location => @game } > else > format.html { render :action => "new" } > format.xml { render :xml => @game.errors, :status > => :unprocessable_entity } > end > end > end > > Thank you very much in advance for any help you could give, > I really need to get this working to finish my project ^^ > > Blaede from Belgium--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thank you very much for your answer Rey. I took a look at the tutorial and it seems very interesting indeed. However, my application is very simple, all pages are accessible by all, except one (the games page) accessible by logged users only. This feature works as it is on my website, my problem comes from the fact I have troubles extracting information from the session[:user]. I need to access the fields of the logged @user. My project must be finished by the 5th of June so if someone could help me solve this problem without re-designing my entire application, I''d be really gratefull. Thanks again --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On May 30, 5:13 pm, Blaede <n.naya...-AgBVmzD5pcezQB+pC5nmwQ@public.gmane.org> wrote:> > This feature works as it is on my website, > my problem comes from the fact I have troubles > extracting information from the session[:user]. > I need to access the fields of the logged @user. >You haven''t actually said what exactly goes wrong. Fred --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> > You haven''t actually said what exactly goes wrong. > > Fred[QUOTE]I need to get the user''s login stored in the session but for some reason I cannot. [/QUOTE] On one hand I have : session[:user] = @user.id and on the other hand (in another controller) I have : @user User.find(session[:user]) which if I am not mistaken should put in @user the session''s user. But when in the next line I try to do : game.host = @user.username (game has a field host containing a string) and then try to do a game.save, rails tells me the host field cannot be null... --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Blaede wrote:>> >> You haven''t actually said what exactly goes wrong. >> >> Fred > > [QUOTE]I need to get the user''s login stored in the session but for > some > reason I cannot. [/QUOTE]that told us only, that "something" went wrong ;-)> On one hand I have : session[:user] = @user.id > and on the other hand (in another controller) I have : @user > User.find(session[:user]) > which if I am not mistaken should put in @user the session''s user. > But when in the next line I try to do : game.host = @user.username > (game has a field host containing a string) and then try to do a > game.save, > rails tells me the host field cannot be null...better that. if session[:user] would be empty, then the find would have told you, that it can''t find a user without an id. so that id is stored in the session. so @user.username is nil or empty or doesn''t exist. maybe misspelled? -- 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Blaede, Blaede wrote:> On one hand I have : session[:user] = @user.id > and on the other hand (in another controller) > I have : @user = User.find(session[:user]) > which if I am not mistaken should put in > @user the session''s user.It will put the object retrieved in your User.find into @user. Problem is the User.find is returning nil. So you need to figure out why that is. A three things come to mind right off the bat. 1) It could be that session[:user] is nil because @user.id is nil when you set session[:user]. Do a puts right before you set session[:user] to check the value of @user.id in the console, and do likewise afterwards to see the value of session[:user] 2) It could be that session[:user] is not an int, which is what User.find() expects. You can check that with session[:user].is_kind_of?(int) (check the syntax) or you can just force it with User.find(session[:user].to_int) 3) It could be that you''re invoking the controller/method that uses session[:user] before the one that sets it. Use puts to display the values as your app executes and you''ll figure out which it is, or what else it is if it''s not one of these. HTH, Bill --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---