2011-10-28 24 views
0

我正在使用Devise omniauth通过Facebook对用户进行身份验证。只允许某些路由设计认证

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } 

这个效果很好,但我想访问的 'http://应用/用户/ sign_in' 限制用户页面

我可以改变路线如下:

devise_scope :user do 
    match '/users/auth/facebook/callback' => 'users/omniauth_callbacks#facebook' 
end 

但那么我如何重定向用户不要从控制器得到不愉快的消息

before_filter :authenticate_user! 

我想要的是用户只能使用devise_scope匹配url,否则将它们总是重定向到默认的'application#index'路由。

回答

1

当仅使用omniauth并且不使用database_authenticatable时,最新的设计版本将始终将您重定向到root_url页面。您可以通过生成一个名为“new_user_session”的路线来指定您的“application#index”来自定义该路线。

+0

谢谢!修改路由文件'devise_for:users,:controllers => {:omniauth_callbacks =>“users/omniauth_callbacks”} do get'users/sign_in'=>'application#about',:as =>:new_user_session end'还必须删除用户模型devise:validatable选项,因为仅使用omniauth选项时密码字段不是必需的。 –