2011-08-11 21 views
18

Como cualquiera puede registrarse y luego iniciar sesión, ... y como un usuario no está identificado para roles hasta después de iniciar sesión, ¿no tiene sentido omitir la autorización_check para Devise?cancan skip_authorization_check para autenticación Devise

Siguiendo esa premisa, heredo del controlador de registro Devise con este registrations_controller y lo coloqué en el directorio del controlador.

class Users::RegistrationsController < Devise::RegistrationsController 
    skip_authorization_check 
end 

cambio en el archivo rutas:

devise_for :users, :controllers => { :registrations => "registrations" } 

me falta algo sin embargo:

This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check. 

Gracias por su ayuda.

+0

@RyanBigg, cuando llegue más allá de este tema, voy a ver si su respuesta a la pregunta anterior es la correcta para la aplicación. Gracias. – Jay

+0

@Hosemeyer, necesito superar este problema antes de poder seguir tu consejo en la otra pregunta. Gracias por tu ayuda. – Jay

Respuesta

38

La solución fácil

check_authorization :unless => :devise_controller? 

Si usted tiene que poner check_authorization en todos los controladores de forma manual en algún momento va a olvidar y abrir un agujero de seguridad en su aplicación. Es mejor incluir explícitamente en la lista blanca los controladores que no necesitan auth por cancan.

Esto se ve claramente en la documentación CANCAN en

https://github.com/ryanb/cancan/wiki/Ensure-Authorization

EDITAR

class ApplicationController < ActionController::Base 
    check_authorization :unless => :do_not_check_authorization? 
    private 
    def do_not_check_authorization? 
    respond_to?(:devise_controller?) or 
    condition_one? or 
    condition_two? 
    end 

    def condition_one? 
    ... 
    end 

    def condition_two? 
    ... 
    end 
end 
+0

Gracias bradgonesurfing +1. Cuando regrese para revisar y probar este código, cambiaré la respuesta aceptada si todo sale bien. – Jay

+0

La respuesta sigue siendo con Mr Bigg que se califica en (-1) – bradgonesurfing

+0

El problema que tengo es que, además del controlador de diseño, hay otros dos controladores que me gustaría omitir. No he podido modificar la condición 'a menos' para agregarlos. Podría poner 'skip_authorization_check' en esos, pero sería mejor si hubiera solo una ubicación en la aplicación que manejara todas las excepciones. – Jay

Cuestiones relacionadas