Homeland 用 Facebook 登录的问题

Peter · 2012年07月09日 · 最后由 Peter 回复于 2012年07月19日 · 4797 次阅读

大家好,我想用 ruby-china 的源码搭网站,在注册这一块,我不想提供直接注册,而是通过第三方登录,比如 facebook, weibo 等,好处就是我不用验证 email 的有效性了,初步设想如下:

(1)user 个加一字段,比如 provider, 默认为 0

(2)用户点击右上角的登录链接,在页面上按下 Facebook 的图片去 Facebook 登录,然后返回网站,这之后在 app/model/user/omniauth-callbacks.rb 里面添加用户信息,如 email,city 等,但不设置 user.login,密码字段就像原来的代码用 Devise.friendly_token[0, 20] 生成。

(3)在 Users::OmniauthCallbacksController 用 email 设定用户登录,并检测(1)中的 provider 字段,如果为 0, 那就定位到一个自定义的设定用户名和密码的页面,比如说 account#register, 当用户输入 unique 的用户名和有效的密码后,provider 设为 1, 进入首页。

(4)如果用户下次再点 Fackbook 登录,并成功返回网站后,因为会检测到 provider 为 1,那直接让用户登录就可以。

现在我卡在第 3 步上,因为对 devise 不熟悉,所以 ruby-china 的代码我不知道怎么改: app/controller/users/omniauth-callbacks-controller.rb

sign_in_and_redirect @user, :event => :authentication, :notice => "登陆成功。"

我问题是,如何重定向到一个自定义的页面上去,我尝试过的代码如下,不成功:

sign_in @user
redirect_to controller => 'account', action =>'register'

另外,我希望当 provider 为 0 的时候,用户在第 3 步设定登录之后,他设置用户名和密码之前,不管点击什么链接,都定位到account#register去,这应该怎么实现呢?

新手做网站,望各位多帮忙,谢谢!

#1 楼 @buyhome 关注请点帖子后面的“关注”功能,不要回帖

ApplicationController?

#2 楼 @huacnlee 关注很小,没太注意

这些天基本上自己摸索得差不多了,用户登录这一块,在我看来是个重头戏,考虑的问题会很多,就现在 ruby-china 的代码来看,会有很多问题。

比如一个普通注册的用户哪天用 github 登录一下,结果就会生成了一个新用户,两个用户名还不能合并,如果是从新浪登录的,连 email 也没有,还要伪造一个 email,这个悲剧的用户还不能改 login 的名字,因为密码还是随机的,他没有这个密码也就改不了密码,所以他下次也只能从新浪登录。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号