====== Authenticated Hello World ====== When you generate an application with the default merb stack, merb-auth is already setup for normal usage. If you don't want to use this, simply comment out the dependency on merb-auth in config/dependencies.rb First step is to generate your application. $ merb-gen app hello_world $ cd hello_world This generates an application stub, with authentication already configured. The basic elements are app/models/user.rb merb/merb-auth/setup.rb merb/merb-auth/strategies.rb The setup for user authentication is taken care of by default using a password and login. Of course we need to setup the database and add a user first. $ rake db:automigrate $ merb -i >> u = User.new(:login => "login_name") >> u.password = u.password_confirmation = "sekrit" >> u.save Now we have an application, and a user, we need something to protect. $ merb-gen controller hello_world Let's put something into the controller. class HelloWorld < Application def index "Hello World" end end If you fire up merb now and head on over to http://localhost:4000/hello_world you'll see the "Hello World" results. It's not protected yet, so let's fix that. We can either protect it in the routes in config/router.rb or in the controller action. Let's do the router option first. Open up config/router.rb Merb::Router.prepare do authenticate do match("/hello_world").to(:controller => "hello_world") end end This will cause the user to login. This is discovered in the router and when it fails, it stops in the router. Try to hit http://localhost:4000/hello_world now. You'll see that you need to login to access it! Ok. Logout, http://localhost:4000/logout Now let's remove the code from the router, and put the protection at the controller level. This will allow you finer control over resources for example. Merb::Router.prepare do match("/hello_world").to(:controller => "hello_world") end Let's now put it into the controller: class HelloWorld < Application before :ensure_authenticated def index "Hello World" end end To get access to the currently logged in user inside your controller use: session.user Really... For a basic Hello World authentication, that's it. If you want more customization, you can do: rake slices:merb-auth-slice-password:freeze:views What that will do is copy the views from the slice to the //slices// folder in your application. Then you need to move/copy them to your //views//. Editing the copied views in //app/views// should now be taken into account.