OmniAuth + Devise + OpenID

最近內部討論結果覺得有可能需要Support Open ID的登入機制,因此就去survey了一下Devise擴展Open ID的方式。因為Devise本身支援OmniAuth,所以就直接以Devise OmniAuth OpenID的方式搜尋了一下,便找到這篇:http://blog.xdite.net/posts/2011/12/05/omniauth-clean-auth-provider-4/

其實這篇照做就可以了,只不過因為原始碼是從http://ruby-taiwan.org那邊來的,所以有一些code是不能用的 ... 需要自己稍微做調整一下

這個實作版本是Rails 3.2.3、Devise 2.0.4、OmniAuth 1.0.3

裡面的Code在omniauth_callbacks.rb中第9行左右有個問題,User必須要用includes把authorizations給引入進來,不然會噴 ... XD

可能是因為原本的Code用MongoID當做Data source的關係,所以原本的Code內並沒有寫includes這一塊吧 ...

然後要記得在user.rb實作bind_service,不然原本的code去bind使用者的部份會有問題 ...

要把omniauth_callbacks.rb放在app/models/user底下、把omniauth_callbacks_controller.rb放在app/controllers/users底下,總之在model的資料夾是user而controller的資料夾是users就對了。

大致上就這樣。

喔對,很重要的一點就是 ... 現在網路上很多範例都會叫你去config/initializers/omniauth.rb內設定provider,這樣做的話一定會噴掉 ... 我在這邊花很多時間才搞定囧,請記住,不必寫在這個地方!

Comments

comments powered by Disqus