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.