QQ OAuth2 插件出错


(idevfun.io) #1

目前在走这个插件的接入流程。

qq那边和客服有过一些来回终于搞定了,通过了审核。p.s. 现在的审核流程不需要验证网站owner

拿到appid 和appkey之后发现插件报错:

Started GET "/auth/qq" for 114.255.214.195 at 2017-07-25 09:35:50 +0000
(qq) Setup endpoint detected, running now.
(qq) Request phase initiated.
Started GET "/auth/qq/callback?code=053F0C5500D12AED116A32Axxxxxx&state=5c5406deb508659eeb95d68adbb2d1a3af682xxxx898e00" for 114.255.214.195 at 2017-07-25 09:36:04 +0000
(qq) Setup endpoint detected, running now.
(qq) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#complete as HTML
  Parameters: {"code"=>"053F0C5500D12AED116A32Axxxxxx", "state"=>"5c5406deb508659eeb95d68adbb2d1a3af682xxxx898e00", "provider"=>"qq"}
  Rendered users/omniauth_callbacks/complete.html.erb (2.4ms)
Completed 500 Internal Server Error in 10ms (ActiveRecord: 1.7ms)
ActionView::Template::Error (undefined method `match' for nil:NilClass)
/var/www/discourse/plugins/discourse-chinese-localization-pack/plugin.rb:68:in `to_client_hash'

还没时间 investigate


配置用 QQ 账号登录 Discourse
(idevfun.io) #2

@fantasticfears 这个错误报在 plugin.rb

ActionView::Template::Error (undefined method `match' for nil:NilClass)
/var/www/discourse/plugins/discourse-chinese-localization-pack/plugin.rb:68:in `to_client_hash'

具体的代码是

  module ::DisableUsernameSuggester
    def to_client_hash
      hash = super                                                    #<======= hash is nil

      # only catch when a oauth login and a username is random
      if hash[:auth_provider]
        match = hash[:username].match(/^\d+$/i)     #<=======  hash is nil

这个是哪里出了问题?to_client_hash 似乎没有覆盖到 super?


(Erick Guan) #3

hash 居然会是 nil,没想到。更新了一下,检查了 hash 是不是存在。


(idevfun.io) #4

好像还是不行:

似乎是 hash[:username] 是nil ,hash 里面没有 username 这个字段


(Erick Guan) #5

那应该是腾讯改接口了?username 是来自 OAuth2 返回的 name 这个属性的,


(Erick Guan) #6

现在我先检查下这个字段,代码在 lib/auth/qq_authenticator.rb:9 这。auth_token 来自 #callback,我想问题应该在收到的 OAuth2 上,有兴趣研究下么? require 'debugger' 会很有用


(idevfun.io) #7

不知道为什么,现在好像已经可以了。

cheers


(Erick Guan) #8

因为更新了…现在检查了下现在有没有这个字段…