tutorial simple rails instalar auth ruby-on-rails devise devise-token-auth

ruby-on-rails - simple - instalar devise rails



¿Problemas con devise_token_auth e inicio de sesión con Facebook? (1)

He estado luchando con esto por algún tiempo y parece que no puedo entender qué está pasando. Estoy usando el dispositivo y el dispositivo _token_auth uno junto al otro. Tengo una aplicación Ionic 2 con la que estoy intentando iniciar sesión a través de Facebook. En este momento, la autenticación de correo electrónico / contraseña está funcionando bien. Aquí hay algo de mi código.

# 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)

Y en mi aplicación Ionic 2 es la siguiente

doFbLogin() { let permissions = ["public_profile"]; let objThis = this; Facebook.login(permissions) .then(function (response) { objThis.authService.tryFacebookLogin(response.authResponse).subscribe( responseNow => console.log(responseNow), error => console.log(error) ); }, function (error) { console.log(error); }); tryFacebookLogin(objParams) { return this.http.get( ''https://example.com/api/v1/auth/facebook'', this.apiService.getGetOptions(objParams) ).map((res) => this.apiService.extractData(res)).catch(this.apiService.handleError); }

He intentado modificar y alterar varios ajustes de configuración, pero no he tenido suerte. Cuando reviso los registros de mi servidor, veo esto constantemente. No crea un usuario de Facebook ni nada.

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

¡Cualquier dirección sería muy apreciada!

EDITAR

Todavía no puedo entender esto. Sin embargo, sí sé que cuando intento iniciar sesión a través de Facebook a través de mi aplicación Ionic, mis registros Heroku muestran que Omniauth acaba de morir en INFO -- omniauth: (facebook) Request phase initiated. . Nunca alcanza o intenta realizar la devolución de llamada porque, de lo contrario, diría INFO -- omniauth: (facebook) Callback phase initiated. , lo que nunca dice. Dicho todo esto, este proceso funciona y el usuario de Facebook se guarda si lo hago manualmente a través de mi sitio Rails. ¿Alguna idea de por qué esa devolución de llamada no se está activando a través de la aplicación? Estoy perdido.

EDITAR

En este punto, ni siquiera estoy seguro de si es la implementación correcta de Ionic 2 y devise_token_auth de inicio de sesión en Facebook. ¿Podría ser un problema en el lado jónico de las cosas? Como dije, a través del navegador parece funcionar. Literalmente tomo el código /api/auth/facebook?..... en mis registros y lo pego en el navegador para que inserte al usuario.

¿Cómo se podría hacer para que esto funcione con una aplicación Ionic 2? Parece que todo funciona a través del navegador, pero falla cuando intento continuar con el inicio de sesión de Facebook a través de Ionic. Aquí está mi código de Ionic 2 para iniciar sesión:

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); }

Y mis registros de 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.

A través de la aplicación, parece morir en INFO -- omniauth: (facebook) Request phase initiated. cada vez. Nunca procede a la devolución de llamada.


Sé que suena raro pero, por favor, intente cambiar su devise_for :users rutas debajo del espacio de nombres: api

Me gusta esto:

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" }

Además, agregue skip: [:registrations] para excluir conflictos:

devise_for :users, controllers: {sessions: "users/sessions"}, skip: [:registrations]

Y vaya a initializers/devise_token_auth.rb y asegúrese de que config.enable_standard_devise_support esté establecido en true

Después de intentar esto, ¿puede anular el controlador de registros y simplemente agregar una pry o algunas funciones de depuración con sus parámetros entrantes? Gracias