Ruby on rails Desive_token_auth和使用Facebook登录存在问题?
我正在使用Desive和Desive_token_auth,彼此并排使用。我有一个离子2应用程序,我正试图通过Facebook登录。目前,电子邮件/密码验证工作正常。这是我的一些代码Ruby on rails Desive_token_auth和使用Facebook登录存在问题?,ruby-on-rails,devise,devise-token-auth,Ruby On Rails,Devise,Devise Token Auth,我正在使用Desive和Desive_token_auth,彼此并排使用。我有一个离子2应用程序,我正试图通过Facebook登录。目前,电子邮件/密码验证工作正常。这是我的一些代码 # initializers/devise_token_auth.rb config.enable_standard_devise_support = true # initializers/omniauth.rb Rails.application.config.middleware.use OmniAuth:
# initializers/devise_token_auth.rb
config.enable_standard_devise_support = true
# initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, 'xxxxx', 'xxxxx', scope: 'email', info_fields: 'email,first_name,last_name'
end
# app/models/user.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:facebook, :google]
include DeviseTokenAuth::Concerns::User
devise :omniauthable
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :null_session, if: -> { request.format.json? }
include DeviseTokenAuth::Concerns::SetUserByToken
# Allow other fields to be passed up on registration.
before_action :configure_permitted_parameters, if: :devise_controller?
def after_sign_in_path_for(resource)
users_path
end
def authenticate_admin
unless current_user && current_user.role == 'admin'
flash[:error] = "Not Authorized"
redirect_to root_path
end
end
protected
# Allow other fields to be passed up on registration.
def configure_permitted_parameters
# Permit the default plus the following.
devise_parameter_sanitizer.permit(:sign_up, keys: [:subscribed])
end
end
# config/routes.rb
devise_for :users, controllers: { :sessions => "users/sessions" }
namespace :api do
namespace :v1 do
mount_devise_token_auth_for 'User', at: 'auth'
end
end
user_facebook_omniauth_authorize_path | GET\|POST | /omniauth/facebook(.:format) | devise/omniauth_callbacks#passthru
-- | -- | -- | --
user_facebook_omniauth_callback_path | GET\|POST | /omniauth/facebook/callback(.:format) | devise/omniauth_callbacks#facebook
user_google_omniauth_authorize_path | GET\|POST | /omniauth/google(.:format) | devise/omniauth_callbacks#passthru
user_google_omniauth_callback_path | GET\|POST | /omniauth/google/callback(.:format) | devise/omniauth_callbacks#google
GET | /api/v1/auth/:provider/callback(.:format) | devise_token_auth/omniauth_callbacks#omniauth_success
-- | -- | --
| GET\|POST | /omniauth/:provider/callback(.:format) | devise_token_auth/omniauth_callbacks#redirect_callbacks
omniauth_failure_path | GET\|POST | /omniauth/failure(.:format) | devise_token_auth/omniauth_callbacks#omniauth_failure
| GET | /api/v1/auth/:provider(.:format) | redirect(301)
我尝试过修改和乱搞一些配置设置,但没有成功。当我检查我的服务器日志时,我总是看到这一点。它不会创建Facebook用户或任何东西
Seans-MacBook-Air:app-s sean$ heroku logs
2017-08-30T17:19:19.354023+00:00 app[web.1]: [d3b2de6b-3404-4f26-a29b-094630260afc] Parameters: {"token_validation"=>{}}
2017-08-30T17:19:20.089604+00:00 heroku[router]: at=info method=GET path="/api/v1/auth/validate_token" host=myherokuapp.herokuapp.com request_id=d3b2de6b-3404-4f26-a29b-094630260afc fwd="70.51.192.141" dyno=web.1 connect=0ms service=762ms status=401 bytes=1982 protocol=https
2017-08-30T17:19:20.086908+00:00 app[web.1]: [d3b2de6b-3404-4f26-a29b-094630260afc] Completed 401 Unauthorized in 733ms (Views: 0.3ms | ActiveRecord: 0.0ms)
2017-08-30T17:19:23.299874+00:00 heroku[router]: at=info method=GET path="/api/v1/auth/facebook?accessToken=EAAFDh9WxI34BACq4ZBJcZBRKOn0wTHJioXequZBlKNN6CzP1rChH7a14SZBOw6mEkhoIXPBXVqET37ANMRMKkk17ErOp4qDMC8JEUWKIT3ph1GhRYFyWLzUQrPmSRTnEICFCkmac4tPMeptO2rHcZCKJwvOnQB0K8TENdR1a3IJZAaiWfXisjSFy01qSWM3sdXxuftkcjgLHxXYLHTEIXll3D5hMf2uOAZD&expiresIn=5180219&session_key=true&sig=...&userID=10156547461238276&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb" host=myherokuapp.herokuapp.com request_id=382104a1-2279-4d14-8bc9-0eefe57f3a45 fwd="70.51.192.141" dyno=web.1 connect=1ms service=6ms status=301 bytes=1463 protocol=https
2017-08-30T17:19:23.293472+00:00 app[web.1]: [382104a1-2279-4d14-8bc9-0eefe57f3a45] Started GET "/api/v1/auth/facebook?accessToken=EAAFDh9WxI34BACq4ZBJcZBRKOn0wTHJioXequZBlKNN6CzP1rChH7a14SZBOw6mEkhoIXPBXVqET37ANMRMKkk17ErOp4qDMC8JEUWKIT3ph1GhRYFyWLzUQrPmSRTnEICFCkmac4tPMeptO2rHcZCKJwvOnQB0K8TENdR1a3IJZAaiWfXisjSFy01qSWM3sdXxuftkcjgLHxXYLHTEIXll3D5hMf2uOAZD&expiresIn=5180219&session_key=true&sig=...&userID=10156547461238276&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb" for 70.51.192.141 at 2017-08-30 17:19:23 +0000
2017-08-30T17:19:23.356264+00:00 app[web.1]: [65adeff7-ebb7-4b9a-8c83-6d0154a4b19d] Started GET "/omniauth/facebook?accessToken=EAAFDh9WxI34BACq4ZBJcZBRKOn0wTHJioXequZBlKNN6CzP1rChH7a14SZBOw6mEkhoIXPBXVqET37ANMRMKkk17ErOp4qDMC8JEUWKIT3ph1GhRYFyWLzUQrPmSRTnEICFCkmac4tPMeptO2rHcZCKJwvOnQB0K8TENdR1a3IJZAaiWfXisjSFy01qSWM3sdXxuftkcjgLHxXYLHTEIXll3D5hMf2uOAZD&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb&expiresIn=5180219&namespace_name=api&resource_class=User&session_key=true&sig=...&userID=10156547461238276" for 70.51.192.141 at 2017-08-30 17:19:23 +0000
2017-08-30T17:19:23.356815+00:00 app[web.1]: I, [2017-08-30T17:19:23.356739 #4] INFO -- omniauth: (facebook) Request phase initiated.
2017-08-30T17:19:23.367474+00:00 heroku[router]: at=info method=GET path="/omniauth/facebook?accessToken=EAAFDh9WxI34BACq4ZBJcZBRKOn0wTHJioXequZBlKNN6CzP1rChH7a14SZBOw6mEkhoIXPBXVqET37ANMRMKkk17ErOp4qDMC8JEUWKIT3ph1GhRYFyWLzUQrPmSRTnEICFCkmac4tPMeptO2rHcZCKJwvOnQB0K8TENdR1a3IJZAaiWfXisjSFy01qSWM3sdXxuftkcjgLHxXYLHTEIXll3D5hMf2uOAZD&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb&expiresIn=5180219&namespace_name=api&resource_class=User&session_key=true&sig=...&userID=10156582648249377" host=myherokuapp.herokuapp.com request_id=65adeff7-ebb7-4b9a-8c83-6d0154a4b19d fwd="70.51.192.141" dyno=web.1 connect=1ms service=11ms status=302 bytes=2283 protocol=https
2017-08-30T17:39:04.311735+00:00 heroku[router]: at=info method=GET path="/api/v1/auth/facebook?accessToken=df978g6hd78fg6h78d6fghaUOlH2X3NMRhbZCsiXjSbrpaSEaZBImkIzQXVeR5uqctZBBYjW0C9XSRqzXuuEz5ZCEOvkktSqJnjmJMgl7ZB4aEQDMRkACPzcSaKxZCHwV9saMLPEkgEYivJ5jWdfghdfghdfghdfghtJBJUw9ZAPkaPo6tXt1CwyCAxoCUJKjapXn4ZAGvyKnxUPCUMrRZBQSvMMZD&expiresIn=5179039&session_key=true&sig=...&userID=10156582648249377&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb" host=myherokuapp.herokuapp.com request_id=d5f155e0-624e-4ed8-b169-3e6f481b23ca fwd="70.51.192.141" dyno=web.1 connect=1ms service=4ms status=301 bytes=1471 protocol=https
2017-08-30T17:39:04.307596+00:00 app[web.1]: [d5f155e0-624e-4ed8-b169-3e6f481b23ca] Started GET "/api/v1/auth/facebook?accessToken=df978g6hd78fg6h78d6fghaUOlH2X3NMRhbZCsiXjSbrpaSEaZBImkIzQXVeR5uqctZBBYjW0C9XSRqzXuuEz5ZCEOvkktSqJnjmJMgl7ZB4aEQDMRkACPzcSaKxZCHwV9saMLPEkgEYivJ5jWdfghdfghdfghdfghtJBJUw9ZAPkaPo6tXt1CwyCAxoCUJKjapXn4ZAGvyKnxUPCUMrRZBQSvMMZD&expiresIn=5179039&session_key=true&sig=...&userID=10156582648249377&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb" for 70.51.192.141 at 2017-08-30 17:39:04 +0000
2017-08-30T17:39:04.502963+00:00 app[web.1]: [ae1670c5-1246-4566-bdf5-24724ba98520] Started GET "/omniauth/facebook?accessToken=df978g6hd78fg6h78d6fghaUOlH2X3NMRhbZCsiXjSbrpaSEaZBImkIzQXVeR5uqctZBBYjW0C9XSRqzXuuEz5ZCEOvkktSqJnjmJMgl7ZB4aEQDMRkACPzcSaKxZCHwV9saMLPEkgEYivJ5jWdfghdfghdfghdfghtJBJUw9ZAPkaPo6tXt1CwyCAxoCUJKjapXn4ZAGvyKnxUPCUMrRZBQSvMMZD&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb&expiresIn=5179039&namespace_name=api&resource_class=User&session_key=true&sig=...&userID=10156582648249377" for 70.51.192.141 at 2017-08-30 17:39:04 +0000
2017-08-30T17:39:04.503515+00:00 app[web.1]: I, [2017-08-30T17:39:04.503429 #4] INFO -- omniauth: (facebook) Request phase initiated.
2017-08-30T17:39:04.515926+00:00 heroku[router]: at=info method=GET path="/omniauth/facebook?accessToken=df978g6hd78fg6h78d6fghaUOlH2X3NMRhbZCsiXjSbrpaSEaZBImkIzQXVeR5uqctZBBYjW0C9XSRqzXuuEz5ZCEOvkktSqJnjmJMgl7ZB4aEQDMRkACPzcSaKxZCHwV9saMLPEkgEYivJ5jWdfghdfghdfghdfghtJBJUw9ZAPkaPo6tXt1CwyCAxoCUJKjapXn4ZAGvyKnxUPCUMrRZBQSvMMZD&deviceToken=foQhl4DYPVI:APA91bFV1L_DM-YcciCPSj3XudUfu8hiThoR2T_uwl0-xSjSNE865tZ36tm4X1mp7Z9z8QzqFVmEpgW2bKRKRmguOVYNFMiORtR7DKo8NsQoCQmb&expiresIn=5179039&namespace_name=api&resource_class=User&session_key=true&sig=...&userID=10156582648249377" host=myherokuapp.herokuapp.com request_id=ae1670c5-1246-4566-bdf5-24724ba98520 fwd="70.51.192.141" dyno=web.1 connect=1ms service=17ms status=302 bytes=2283 protocol=https
编辑
还是搞不懂这个。但我知道,当我试图通过Ionic应用程序通过Facebook登录时,我的Heroku日志显示Omniauth在INFO时死亡——Omniauth:(Facebook)请求阶段启动。
。它永远不会到达或试图点击回调,因为否则它会说INFO--omniauth:(facebook)回调阶段启动。
,它从来没有说过。所有这些都说明,如果我通过Rails站点手动操作,这个过程是有效的,Facebook用户将被保存。你知道为什么应用程序不会触发回调吗?我迷路了
编辑
在这一点上,我甚至不确定它是否是离子2和Desive_token_auth Facebook omniauth登录的正确实现。可能是离子方面的问题?就像我说的,通过浏览器它似乎可以工作。我将下面的/api/auth/facebook?..
代码粘贴到浏览器中,并插入用户
如何让它与离子2应用程序一起工作?似乎所有的东西都可以通过浏览器工作,但当我尝试通过爱奥尼亚登录Facebook时失败了。以下是我要登录的Ionic 2代码:
doFacebookLogin() {
let objThis = this;
this.fb.login(['public_profile', 'email'])
.then(function (response) {
objThis.authService.tryFacebookLogin(response.authResponse).subscribe(
responseNow => objThis.loginSuccess(responseNow),
error => console.log(error)
);
}, function (error) {
console.log(error);
});
}
tryFacebookLogin(objParams) {
return this.http.get(
this.apiService.createUrl('auth/facebook'),
this.apiService.getGetOptions(objParams)
).map((res) => this.apiService.extractData(res)).catch(this.apiService.handleError);
}
还有我在Heroku的日志:
[d9350f73-4cbc-400c-8296-0248b2454a64] Started GET "/api/auth/facebook?accessToken=EAAFDh9WxI34BAEpTy54mVhiZCUtGDcCdQgHg8yYxIfHCk0iciDUZCsrkZAdu9SJ8vCLMZChgt7QoGZBkzvWzNkFFLhwJEcCrxtRo9dJ8ioOsErwM8h2Kv8dileZAjACZAheVg7nIxd7gKX1kZALdY2Ve7rwFxLeg0eKCYfZBBHGkjaZALkwLY1tEktsKYfrBNAR6wii2LZBoQtUEKe0Acc8ZD&expiresIn=5107217&session_key=true&sig=...&userID=xxx" for 184.145.16.206 at 2017-09-27 17:08:41 +0000
2017-09-27T17:08:41.505526+00:00 app[web.1]: [3c08d61c-4c30-4361-902a-cee8e15b63bc] Started GET "/omniauth/facebook?accessToken=EAAFDh9WxI34BAEpTy54mVhiZCUtGDcCdQgHg8yYxIfHCk0iciDUZCsrkZAdu9SJ8vCLMZChgt7QoGZBkzvWzNkFFLhwJEcCrxtRo9dJ8ioOsErwM8h2Kv8dileZAjACZAheVg7nIxd7gKX1kZALdY2Ve7rwFxLeg0eKCYfZBBHGkjaZALkwLY1tEktsKYfrBNAR6wii2LZBoQtUEKe0Acc8ZD&expiresIn=5107217&namespace_name=api&resource_class=User&session_key=true&sig=...&userID=xxx" for 184.145.16.206 at 2017-09-27 17:08:41 +0000
2017-09-27T17:08:41.507171+00:00 app[web.1]: I, [2017-09-27T17:08:41.506900 #4] INFO -- omniauth: (facebook) Request phase initiated.
通过该应用程序,它似乎在
INFO——omniauth:(facebook)请求阶段启动时死亡。
每次。它从不进行回调。我知道这听起来很奇怪,但是,请尝试切换命名空间:api下面的design_for:users
路由
像这样:
namespace :api do
namespace :v1 do
mount_devise_token_auth_for 'User', at: 'auth'
end
end
# config/routes.rb
devise_for :users, controllers: { :sessions => "users/sessions" }
另外,添加跳过:[:注册]
以排除冲突:
devise_for :users, controllers: {sessions: "users/sessions"}, skip: [:registrations]
然后转到initializers/designe\u token\u auth.rb
并确保config.enable\u standard\u designe\u support
设置为true
尝试此操作后,是否可以覆盖注册控制器,并简单地添加一个
pry
或一些调试put
,以及传入的参数?谢谢因为您将JS响应记录到控制台(console.log(错误)
),您收到了什么吗?@HolgerFrohloff我从Facebook获得了正确的数据“{”状态“:“已连接”,“authResponse:{”accessToken:”EAAFDH9WXI34BAFCUFVS0FUKZBIJTTPZBZBJ3GCC79SC3GTTHGGHJ7KXOxNSG3PZAHI1WP62I35QGZNxF43HYG5CEHNS9XL7ATP6EE1PWCENVMBYPOTYZZZCGEYGZBQQEis1HJUIP6S8LZQBQDIXELEG7Fi0P3DF8A7A7S9F6A879SD6F7A8S6DF76ASDFA6S78D6F987AS6GD76F9S7S7S7SD6F7S7SD6GFG“:“密钥到期”和“有效期”、“有效期”、“有效期”、“有效期”、“有效期”、“有效期”、“有效期”与“用户代码”有区别。不过,值得注意的是,当我点击端点auth/facebook
时,它似乎像我上面提到的那样失败了。但是,如果我运行heroku日志,我会看到/omniauth/facebook?accessToken=xxx&expiresIn=5180180&namespace\u name=api\u v1&resource\u class=User&session\u key=true&sig=…&userID=xxx
。如果我将该URL复制到我的浏览器并手动点击我的服务器,facebook用户实际上会注册并运行。它似乎不适用于api。很长一段时间,但是在包含developetokenauth::Concerns::User
之后和之前,您有一个设计:omniauthable
。因此,我建议您删除最后一个。除非有什么我没注意到的不幸的是那没什么区别。。。似乎只是在某个点上随机失败。。我确实看到它击中了回调函数,因为它击中了一个错误,用户模型上不存在“name”。我添加了一个迁移来修复这个问题,现在我没有收到任何反馈,关于它在通过api时是否会命中回调。这很奇怪,因为它在没有api的情况下工作。例如,确保您不需要电子邮件属性。否则,就像重写寄存器控制器一样,然后使用binding.pry调试每个迭代,并尝试了解失败的地方。如果它进入这个端点,你会很容易找到原因。否则这是一个路线问题。但这只是一个建议,我也有点迷茫。所以我甚至不认为api会影响那些omniauth\u回调\u controller
方法。我覆盖了redirect_回调
和omniauth_success
,日志中没有输出任何内容。当我通过浏览器进行调试时,虽然我看到了调试内容。这是我在我的Heroku服务器上单击应用程序上的“使用FB登录”时看到的最后一件事2017-09-15T14:30:09.037870+00:00 Heroku[router]:at=info method=GET path=“/omniauth/facebook?accessToken=xxxxxxxx”
。一定是路由问题?这是我用FB/api/v1/auth/:provider(:format)-->点击登录时的路线。重定向(301)
devise_for :users, controllers: {sessions: "users/sessions"}, skip: [:registrations]