1

我知道我还没有设置 Facebook(这似乎是一个相似但不同的野兽),但现在,根据我的理解,我应该能够使用我的 Twitter 用户名登录,并显示“你已签名在!” 并在上面显示我的用户名

<span>Logged in as <%= current_user.username %>.</span>

另外,稍微分开说明一下,我很想知道为什么flash.notice对我不起作用。这在 Rails 4 中已被弃用,还是我的 application.html.erb 文件中缺少某些内容供他们显示?

我的工作来自:http ://railscasts.com/episodes/235-devise-and-omniauth-revised

这是我目前正在使用的代码。

https://github.com/erosenberg/devise-app

编辑:好的,抱歉我不是很具体,我认为我的文字墙会得到更少的回复,所以我缩短了它。

本质上,我正在尝试使用 Railscast 来让 Devise 与 Omniauth 一起工作。过去,我让 Omniauth 和 Devise 自己工作,将它们组合在一起是一个全新的挑战——考虑到每个教程都告诉我要以不同的方式来做,而且它们似乎都已经过时了。我设置它的方式是 RailsCast 推荐的方式——添加一个 OmniAuthCallbacks 控制器,但这似乎没有任何作用。当我尝试使用我的应用程序使用 Twitter 登录时,它只是将我带回登录页面,但是,当我尝试使用电子邮件地址登录时,它可以工作并将我带到我创建的“仪表板” . 由于某种原因,Twitter 登录不起作用,我也希望能够使用 flash[:notice] 进行测试,但由于某种原因也不起作用。

如果您需要我更详细地解释,我也可以尝试这样做。谢谢!

4

1 回答 1

2

在您的 config/initializers/devise.rb 中,您没有更改配置。

config.authentication_keys = [ :email ]

这意味着它默认使用电子邮件进行身份验证。因此,您缺少的代码正在保存用户的电子邮件或验证失败。

您可以更改 authentication_key 或保存电子邮件。

编辑

好的,在我克隆应用程序并在我的机器上运行之后。我确定这是因为电子邮件验证失败。因为当您在这里使用设计生成器创建迁移文件时,设计验证电子邮件必须默认存在。

t.string :email,              :null => false, :default => ""

因此,您可以回滚以将此迁移更改为远程 ':null => false'。之后将此代码添加到用户用户模型:

def email_required?
  false
end

并且不要忘记更改您的配置以获取正确的身份验证密钥。

config.case_insensitive_keys = [ :username ]
config.strip_whitespace_keys = [ :username ]
于 2013-08-20T03:49:13.257 回答