我正在使用设计,我正在尝试允许用户使用twitter / facebook注册。我很困惑,因为我不断得到\ 没有路由匹配{:controller =>“authentications”,:action =>“passthru”,:provider =>:twitter,:format => nil}缺少必需的密钥:[:provider]
的routes.rb
devise_for :users,controllers: {omniauth_callbacks: "authentications", registrations: "registrations"}
AuthenticationController.rb
class AuthenticationsController < ApplicationController
def index
@authentications = Authentication.all
end
def create
@authentication = Authentication.new(params[:authentication])
if @authentication.save
redirect_to authentications_url, :notice => "Successfully created authentication."
else
render :action => 'new'
end
end
def destroy
@authentication = Authentication.find(params[:id])
@authentication.destroy
redirect_to authentications_url, :notice => "Successfully destroyed authentication."
end
def twitter
raise omni = request.env["omniauth.auth"].to_yaml
end
end
答案 0 :(得分:16)
我假设你在用户模型中有类似下面的东西;因此,您收到此路由错误。
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:validatable, :omniauthable,
:omniauth_providers => [:facebook],
:omniauth_providers => [:twitter]
将其更改为以下内容:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:validatable, :omniauthable,
:omniauth_providers => [:facebook, :twitter]
答案 1 :(得分:1)
我关注的是omniauth example on github,我有
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
devise :omniauthable, :omniauth_providers => [:google]
end
但需要只有一个设计线如下:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:google]
end