ruby-on-rails - gema - install devise rails 5
Creación de usuarios implícita con Authlogic y Authlogic OAuth plugin (1)
Estoy tratando de escribir una aplicación para el consumidor OAuth simple en Rails. Estoy usando Authlogic para manejar la autenticación y el complemento Authlogic OAuth para hacer lo mismo.
El complemento oauth proporciona un par de ayudantes para representar el botón de inicio de sesión: oauth_login_button y oauth_register_button. Junto con las lógicas de Authlogic y la solicitud del complemento, estos dos botones de alguna manera crean la sesión / usuario.
Lo que sucede a continuación es el siguiente: si utilizo el ayudante oauth_login_button, el objeto de la sesión no se puede guardar porque no existe tal usuario localmente. - Si utilizo el ayudante oauth_register_button, entonces, en cualquier inicio de sesión posterior al primero, Rails se queja de que el token ya se ha tomado ... eso significa que no puede crear la segunda copia para el mismo usuario, lo cual es correcto.
El problema es: no quiero tener AMBOS botones de registro e inicio de sesión en mi sitio.
En el lado del usuario, lo que quiero lograr es un solo botón en la página de inicio, diciendo algo. como "Iniciar sesión con Twitter", que el usuario debe hacer clic para pasar a las páginas internas del sitio.
En el lado del servidor, quiero crear implícitamente la cuenta de usuario local, si el usuario es un visitante por primera vez a mi sitio.
¿Alguna pista sobre cómo hacer esto?
Todas las muestras en Authlogic + OAuth que pude encontrar no parecen importarle tener solo un botón para iniciar sesión. :(
Parece que voy a responder la pregunta yo mismo.
Uso el siguiente código para generar el botón Iniciar sesión (en HAML):
- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do
= oauth_register_button :value => "Sign In with Twitter"
y luego simplemente creo el objeto de sesión del usuario en el método de creación de la clase UsersController, si el usuario ya existe:
def create
@user = User.new(params[:user])
@user.save do |result| # LINE A
if result
flash[:notice] = "Account registered!"
redirect_to some_inner_path
else
unless @user.oauth_token.nil?
@user = User.find_by_oauth_token(@user.oauth_token)
unless @user.nil?
UserSession.create(@user)
flash.now[:message] = "Welcome back!"
redirect_to some_inner_path
else
redirect_back_or_default root_path
end
else
redirect_back_or_default root_path
end
end
end
end
Si el usuario es un visitante por primera vez, entonces el objeto de usuario se guarda con éxito en la LÍNEA A. Y si no lo es y hay un token disponible, entonces intentamos recuperar al usuario de la base de datos e iniciar sesión.