最近內部討論結果覺得有可能需要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,這樣做的話一定會噴掉 … 我在這邊花很多時間才搞定囧,請記住,不必寫在這個地方!