420 likes | 562 Views
Vandaag:. Emails versturen Aspect Oriented Programming in Rails Sessies en login beveiliging Zelf schrijven Plugins: restful_authentication, authlogic,… AJAX: handig pagina’s wijzigen. Emails versturen. Vanuit je rails applicatie. Mail versturen: overzicht. Mail settings
E N D
Vandaag: • Emails versturen • Aspect Oriented Programming in Rails • Sessies en login beveiliging • Zelf schrijven • Plugins: restful_authentication, authlogic,… • AJAX: handig pagina’s wijzigen Wolter Kaper - w.h.kaper@uva.nl
Emails versturen Vanuit je rails applicatie Wolter Kaper - w.h.kaper@uva.nl
Mail versturen: overzicht • Mail settings • Mailer model • Heeft een methode voor elk type mail • U kunt hier uw account activeren • Uw account is geactiveerd • Mailer views • Een map met views voor elk mailer model • In die map: 1 view per email-type • Versturen: in de controller / observers Wolter Kaper - w.h.kaper@uva.nl
Mail SMTP settings Wolter Kaper - w.h.kaper@uva.nl
Mail SMTP settings Wolter Kaper - w.h.kaper@uva.nl
Environment settings Wolter Kaper - w.h.kaper@uva.nl
Mailer model Wolter Kaper - w.h.kaper@uva.nl
Mailer Views Wolter Kaper - w.h.kaper@uva.nl
Mailer Views Wolter Kaper - w.h.kaper@uva.nl
Mailer View Wolter Kaper - w.h.kaper@uva.nl
Mailer model Wolter Kaper - w.h.kaper@uva.nl
Mailer model • Erft van ActionMailer::Base • Heeft methoden voor elk type email • Zet @variabelen klaar • voor gebruik in de mailer views Wolter Kaper - w.h.kaper@uva.nl
En nu versturen… Controller Wat doen? Welk emailtype? Wolter Kaper - w.h.kaper@uva.nl
Filters en Observers Aspect Oriented Programming in Rails Wolter Kaper - w.h.kaper@uva.nl
Aspect Oriented Programming • Op veel punten in je code wil je hetzelfde • Loggen • Controleren of de user is ingelogd • … • Ideaal: • op één plek in je code • Vertellen wat er gebeuren moet • En wanneer het gebeuren moet Wolter Kaper - w.h.kaper@uva.nl
AOP in Rails • Filters • Toepassing: controllers (application_controller) • Bij aanroep van een methode • before / after / around • Observers • Toepassing: model klassen • Bij gebeurtenissen uit de levenscyclus: • Initialize, validation, create, save, destroy, find • before / after Wolter Kaper - w.h.kaper@uva.nl
Filters – login beveiliging Aspect Oriented Programming Wolter Kaper - w.h.kaper@uva.nl
Filters – login beveiliging Wolter Kaper - w.h.kaper@uva.nl
Filters – login beveiliging Wolter Kaper - w.h.kaper@uva.nl
Filters • before_filter :login_required, \ only=>[:edit, :delete] • before_filter :login_required, \ except=>[:show, :index] Wolter Kaper - w.h.kaper@uva.nl
Observers Een observer klasse: • Observeert 1 of meer model klassen • Vertelt wat er gebeuren moet • voor / na • gebeurtenissen: • Initialize, validation, create, save, destroy, find Wolter Kaper - w.h.kaper@uva.nl
Observer klasse Wolter Kaper - w.h.kaper@uva.nl
Observer klasse Wolter Kaper - w.h.kaper@uva.nl
Observers - configuratie • Observers staan geheel op zichzelf • Nergens een verwijzing, behalve…: Wolter Kaper - w.h.kaper@uva.nl
Observer klasse • Erft van ActiveRecord::Observer • Observeert 1 of meer model klassen • Methoden voor elke gebeurtenis • Configuratie: environment.rb Wolter Kaper - w.h.kaper@uva.nl
Authenticatie met wachtwoord Wolter Kaper - w.h.kaper@uva.nl
Zelf schrijven / Rails plugin • Er zijn goede rails plugins • restful_authentication • authlogic • Zelf schrijven is niet moeilijk Wolter Kaper - w.h.kaper@uva.nl
Zelf schrijven • scaffold User • model, controller, views, db-tabel • attributen: loginnaam, wachtwoord, ... • sessions_controller • new actie: presenteer login form • create actie: start sessie als login correct • User.find(:conditions=>[‘loginnaam=? AND wachtwoord=?’, loginnaam, wachtwoord]) • session[:loginnaam]=loginnaam • destroy actie • session[:loginnaam]=nil Wolter Kaper - w.h.kaper@uva.nl
Zelf schrijven 2 • Controllers beveiligen met “filter” Zet deze methode evt. in ApplicationController(application_controller.rb) Maak hem dan protected Wolter Kaper - w.h.kaper@uva.nl
restful_authentication plugin • Kun je gebruiken • Alle plugins die je vindt kun je gebruken • Mits je ze vermeldt in je documentatie • Kun je bekijken • Mooie voorbeeldcode • Sommige zaken diep weggestopt: de sessie • Wat heeft hij extra? • Wachtwoord encryptie met “site key” • Registratie pagina, registratie email, ... Wolter Kaper - w.h.kaper@uva.nl
Installeren • git client installeren • http://code.google.com/p/msysgit/downloads/list • cd myrailsapp • git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful_authentication • check myrailsapp/vendor/plugins • ruby script/generate authenticated User Session --include-activation Wolter Kaper - w.h.kaper@uva.nl
Wat maakt deze generator? • Modellen: • users • self.authenticate(loginnaam, wachtwoord) • Controllers: • users_controller • new • create • sessions_controller • new • create • destroy Wolter Kaper - w.h.kaper@uva.nl
Wat maakt-ie...? • Views • users • _user_bar.html.erb (“u bent ingelogd als”) • new.html.erb (registratieform) • sessions • new.html.erb (loginform) • Helpers • UsersHelper Wolter Kaper - w.h.kaper@uva.nl
Wat maakt-ie? • config/routes.rb • routes toegevoegd: /signup, /register, /login, /logout, zelf toevoegen: /activate • map.resources: users, sessions • config/initializers/site-keys.rb • een geheime sleutel die gebruikt wordt om wachtwoorden te beveiligen • wijzig de sleutel => alle wachtwoorden onbruikbaar! • toon sleutel aan anderen=> beveiliging weg Wolter Kaper - w.h.kaper@uva.nl
Wat maakt-ie? • db/migrations • migratie om de users tabel te creëren • Toevoegen aan routes.rb: • Map.activate ‘/activate/:activation_code’,:controller=>’users’,:action=>’activate’,:activation_code=>nil • Mail instellingen Wolter Kaper - w.h.kaper@uva.nl
users tabel Wolter Kaper - w.h.kaper@uva.nl
user model Wolter Kaper - w.h.kaper@uva.nl
user model - vervolg • Authenticate is een klasse-methode Wolter Kaper - w.h.kaper@uva.nl
users_controller Wolter Kaper - w.h.kaper@uva.nl
sessions_controller Wolter Kaper - w.h.kaper@uva.nl
sessions_controller (vervolg) Wolter Kaper - w.h.kaper@uva.nl
Nu je controllers beveiligen • application_controller.rb • include AuthenticatedSystem • (nu kan dit zinnetje weg uit userscontroller en sessionscontroller) • in je andere controllers: • before_filter :login_required Wolter Kaper - w.h.kaper@uva.nl