thanks Daniel. I am now using the hook as you describe instead of hacking redirect_after_login.
Now I see that I still need to find the correct way to "programmatically" login a user. I have been doing: session.user = user in my controller code. This does give me an authenticated session, but is obviously not the front-door approach as it does not trigger the after_authentication hook. Can you steer me to the correct approach. In my situation, I have a User that other parts of my code has authenticated (in this case, the successful activation of a user). In this case, I do not need merb- auth or your slice to do much work but to just accept my user object and setup the session accordingly. thanks, Jon On Dec 8, 7:50 am, "Daniel N" <[EMAIL PROTECTED]> wrote: > Hi Jon, > > There are after authentication hooks available to you. The user, request > and params (route) object are availalbe to you. To do what you're doing > there you should be able to do something like: > > Merb::Authentication.after_authentication do |user, request, params| > request.session[:display_name] = user.display_name > user > end > > Be sure to finish with the user. By returning the user, the authentication > continues. (with the user object to be logged in) if you return false / > nil, you'll effectively cancel the login. > > You can have as many of these blocks as you like. The user object from one > is forwarded to the next etc until all are complete. > > Cheers > Daniel > > On Mon, Dec 8, 2008 at 10:37 AM, Jon Hancock <[EMAIL PROTECTED]> wrote: > > > I mostly have merb-auth (using the password slice) working correct. > > There's still one piece I'm failing to figure out. > > > In slices/merb-auth-slice-password/app/controllers/sessions.rb > > I have edited as follows: > > > private > > # @overwritable > > def redirect_after_login > > message[:notice] = "Login Successful. Enjoy ShellShadow!" > > session[:display_name] = session.user.display_name > > redirect_back_or url(:home), :message => message, :ignore => > > [slice_url(:login), slice_url(:logout)] > > end > > > The line: session[:display_name] = session.user.display_name > > works well when I do a normal login. > > > However, if some other controller action authenticates the user (for > > examples, when the user activates his account, I automatically log him > > in as part of the activation process), I use this line in my > > controller: > > > session.user = user > > > This works in that the user is authenticated so far as merb-auth is > > concerned. However, I do not get the display_name set in the cookie. > > > I obviously should not be setting the display_name in > > redirect_after_login, but somewhere else. > > > Any tips? > > > thanks, Jon --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "merb" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/merb?hl=en -~----------~----~----~----~------~----~------~--~---
