Professional Documents
Culture Documents
OAuth"
Ingeniera de Sistemas de Informacin! Grado en Ingeniera en Tecnologas de Telecomunicacin" GSyC"
GSyC"
2"
# Autorizacin: prueba que tienes permiso para hacer lo que ests pidiendo"
# te tiene registrado el sistema como usuario con ciertos privilegios?" # posees un token o una capability que te habilita para hacer algo?"
GSyC"
4"
# Habitualmente el string slo contiene un handle a la info interesante que almaceno en el servidor"
# Si el proveedor recibe el string s que puedo conar en el handle"
3. Te fas de RottenPotatoes?
MyRottenPotatoes
GSyC"
8"
MyRottenPotatoes
6. Aqu te paso un token que prueba que tengo permiso para acceder a la info personal de este usuario, dmela (nombre y apellidos p.ej.)
GSyC" 9"
# Una vez se haya autenticado un usuario, el usuario mantiene una sesin activa"
# Activa == mientras que en session[:user_id] est su clava primaria en la tabla moviegoers no le hacemos autenticarse en cada interaccin con nuestro servidor"
Ejemplo de uso de proveedor de autenticacin twitter con la aplicacin myrottenpotatoes! (ELLS 7.2)"
# Puedes seleccionar lo que la app podr saber de la identidad de un usuario de twitter" # Tienes que decir la url de tu aplicacin a la que twitter tiene que redirigir al navegador en el paso 5 de la interaccin entre twitter y tu aplicacin: "
# http://zeta07.aulas.gsyc.es:3000/auth/twitter/callback ! # http://XXX.herokuapp.com/auth/twitter/callback
# Fjate en el consumer key y comsumer secret que te genera, los necesitas para congurar la gema omniauth
GSyC" 12"
GSyC"
13"
Editamos el modelo:
# Edit app/models/moviegoer.rb to look like this: class Moviegoer < ActiveRecord::Base include ActiveModel::MassAssignmentSecurity attr_accessible :uid, :provider, :name def self.create_with_omniauth(auth) Moviegoer.create!( :provider => auth["provider"], :uid => auth["uid"], :name => auth["info"]["name"]) end end
GSyC"
http://pastebin.com/emF90DDN
14"
Filtro para forzar a que se autentique el usuario que no tenga una sesin activa "
Filtro aplicable a toda accin de la aplicacin:
class ApplicationController < ActionController::Base protect_from_forgery before_filter :set_current_user, :except => 'login' protected # prevents method from being invoked by a route def set_current_user # we exploit the fact that find_by_id(nil) returns nil @current_user ||= Moviegoer.find_by_id(session[:user_id]) redirect_to '/login' and return unless @current_user end end
http://pastebin.com/jQxxUzps
Si no tiene una sesin activa ( == no est su :user_id en session[]) tiene que autenticarse en twitter, para lo cul le redirigimos a la pgina de login
GSyC" 15"
Controlador SessionController
Create es la accin a la que twitter Redirige al browser en el paso 5, en la que recibimos el token class SessionsController < ApplicationController # user shouldn't have to be logged in before logging in! skip_before_filter :set_current_user def create auth = request.env["omniauth.auth"] user = Moviegoer.find_by_provider_and_uid(auth["provider"], auth["uid"]) || Moviegoer.create_with_omniauth(auth) session[:user_id] = user.id redirect_to movies_path end def destroy session.delete(:user_id) flash[:notice] = 'Logged out successfully.' redirect_to movies_path end def login end end GSyC"
http://pastebin.com/jQxxUzps
16"
En app/views/layouts/application.html.haml
!!! 5 %html %head %title Rotten Potatoes! = stylesheet_link_tag 'application' = javascript_include_tag 'application' = csrf_meta_tags %body - if flash[:notice] #notice.message= flash[:notice] - elsif flash[:warning] #warning.message= flash[:warning]
http://pastebin.com/zJ6gP2GD
sessions/_login.html.haml
#login http://pastebin.com/jQxxUzps - if @current_user %p.welcome Welcome, #{@current_user.name}! = link_to 'Log Out', logout_path - else %p.login= link_to 'Log in with your Twitter account', '/auth/twitter? force_login=true'
touch sessions/login.html.haml
GSyC" 17"