Je suis en train de créer une bibliothèque numérique et j'ai complété de nombreuses fonctionnalités nécessaires. J'ai actuellement un problème avec l'intégration de la bibliothèque numérique avec un système de gestion de l'apprentissage (LMS).
J'ai déjà un système d'authentification administrateur pour la bibliothèque numérique à l'aide du Devise gem . Mon objectif est de permettre aux utilisateurs qui souhaitent accéder à la bibliothèque numérique de se connecter à la bibliothèque numérique en utilisant leurs informations d'identification du système de gestion de l'apprentissage (LMS) (nom d'utilisateur et mot de passe).
J'ai reçu le point de terminaison de l'API de connexion et d'autres paramètres nécessaires du système de gestion de l'apprentissage (LMS) , et j'ai créé le modèle utilisateur , le contrôleur de sessions et le Modèles d'affichage des sessions .
J'utilise actuellement le RestClient Gem pour l'appel d'API, mais j'ai une erreur variable locale ou méthode non définie "username" pour # Vouliez-vous dire? chemin_utilisateur . Je ne sais pas où les choses ont mal tourné.
Contrôleur de sessions
class User < ApplicationRecord has_secure_password validates :username, presence: true, uniqueness: true end
Nouvelle vue des sessions strong>
<p id=âalertâ><%= alert %></p>
<h1>Login</h1>
<%= form_tag sessions_path do %>
<div class="field">
<%= label_tag :username %>
<%= text_field_tag :username %>
</div>
<div class="field">
<%= label_tag :password %>
<%= password_field_tag :password %>
</div>
<div class="actions">
<%= submit_tag 'Login' %>
</div>
<% end %>
Modèle utilisateur
require 'rest-client'
class SessionsController < ApplicationController
def new
end
def create
response = RestClient::Request.execute(
method: :post,
url: 'https://newapi.example.com/token',
payload: { 'username': "#{username}",
'password': "#{password}",
'grant_type':'password' },
headers: { apiCode: '93de0db8-333b-4f478-aa92-2b43cdb7aa9f' }
)
case response.code
when 400
flash.now[:alert] = 'Email or password is invalid'
render 'new'
when 200
session[:user_id] = user.id
redirect_to root_url, notice: 'Logged in!'
else
raise "Invalid response #{response.to_str} received."
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: 'Logged out!'
end
end
Toute forme d'aide avec des exemples de code sera très appréciée. Je suis également ouvert à fournir plus d'informations sur cette intégration si nécessaire. Merci d'avance.
3 Réponses :
Peut-être devriez-vous utiliser params [: username] plutôt que seulement username ?
Je vous remercie beaucoup pour votre aide. Je rencontre un autre problème 400 Bad Request . Voici un lien vers la question stackoverflow.com/q/57615476/10907864 . Merci.
Je vous remercie beaucoup pour votre aide. J'ai un autre problème variable locale non définie ou méthode "user" pour #SessionsController . Voici un lien vers la question stackoverflow.com/q/57615870/10907864 . Merci.
nom d'utilisateur et mot de passe dans la charge utile sont des variables non définies. Veuillez définir leurs valeurs. Les valeurs possibles peuvent être params [: username] et params[:password
Je vous remercie beaucoup pour votre aide. Je rencontre un autre problème 400 Bad Request . Voici un lien vers la question stackoverflow.com/q/57615476/10907864 . Merci.
Je vous remercie beaucoup pour votre aide. J'ai un autre problème variable locale non définie ou méthode "user" pour #SessionsController . Voici un lien vers la question stackoverflow.com/q/57615870/10907864 . Merci.
Je pense que le problème est en fait qu'à l'intérieur de votre Vous pourriez probablement choisir celles de paramètres comme celui-ci: Ou interpolez-les directement dans la charge utile en remplaçant les appels de méthode actuels par Dans de telles situations , il est bon d'utiliser Vous pourriez aussi penser à fermer certaines parties de votre logique dans les objets Service - vous ne devriez pas avoir plus de 10 à 15 lignes dans l'action de votre contrôleur (sauf si la situation l'exige) SessionsController dans l'action create , vous interpolez username et password . Il n'y a pas de définition pour ces méthodes dans votre code, donc vous obtenez variable locale ou méthode non définie . def username
params[:username]
end
def password
params[:password]
end
params [: username] et params[:passwordITED. byebug ou pry pour déboguer votre code et voir ce qui se passe à l'intérieur de votre contrôleur.
Pas de problème, heureux de vous aider :)
Je vous remercie beaucoup pour votre aide. Je rencontre un autre problème 400 Bad Request . Voici un lien vers la question stackoverflow.com/q/57615476/10907864 . Merci.
Je vous remercie beaucoup pour votre aide. J'ai un autre problème variable locale non définie ou méthode "user" pour #SessionsController . Voici un lien vers la question stackoverflow.com/q/57615870/10907864 . Merci.