我正在尝试在Rails 4中创建一个应用程序。
我正在尝试按照本教程进行操作: http://sourcey.com/rails-4-omniauth-using-devise-with-twitter-facebook-and-linkedin/
我已将om_sign_in_path从omniauth回调控制器移动到应用程序控制器,以便我可以扩展它。
我目前在应用程序控制器中的尝试是:
def after_sign_in_path_for(resource)
if !resource.email_verified?
finish_signup_path(resource)
elsif params[:redirect_to].present?
store_location_for(resource, params[:redirect_to])
elsif request.referer == new_session_url
profile_path(resource.profile) # or whatever the route is for the destination you want
else
store_location_for(resource) || request.referer || root_path
end
end
当我尝试这个时,我收到了这个错误:
ArgumentError in Users::OmniauthCallbacksController#linkedin
wrong number of arguments (0 for 1+)
它突出了上述方法的这一行:
elsif request.referer == new_session_url
我不知道此错误消息的含义。
我的回调控制器有:
def self.provides_callback_for(provider)
class_eval %Q{
def #{provider}
@user = User.find_for_oauth(env["omniauth.auth"], current_user)
if @user.persisted?
sign_in_and_redirect @user, event: :authentication
set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
else
session["devise.#{provider}_data"] = env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
}
end
这是将omniauth_callbacks控制器中的方法移出应用程序控制器吗?
谁能看到我做错了什么?
我的会话路线是:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
考虑到TOM的建议,我将应用程序控制器中的重定向方法更改为:
def after_sign_in_path_for(resource)
if !resource.email_verified?
finish_signup_path(resource)
elsif params[:redirect_to].present?
store_location_for(resource, params[:redirect_to])
elsif request.referer == new_session_path(:user)
profile_path(resource.profile) # or whatever the route is for the destination you want
else
stored_location_for(resource) || request.referer || root_path
end
end
问题在于,当我尝试登录时,我希望转到用户的个人资料显示页面。相反,我去了根路径。将(:user)添加到第二个elsif语句的末尾似乎导致了这种情况的发生。那不是我想要的。
任何人都可以看到如何设置在此上下文中工作的路径吗?
答案 0 :(得分:1)
Devise提供new_session_path / url,它将资源名称作为参数
elsif request.referer == new_session_url(:user)
例如