【发布时间】:2019-12-28 03:55:45
【问题描述】:
我正在建立一个数字图书馆,并且我已经完成了很多需要的功能。我目前在将数字图书馆与学习管理系统 (LMS) 集成时遇到问题。
我已经有一个使用 Devise gem 的数字图书馆管理员身份验证系统。我的目标是允许想要访问数字图书馆的用户使用他们的学习管理系统 (LMS) 凭据(用户名和密码)登录数字图书馆。
我已经获得了学习管理系统 (LMS) 的登录 API 端点和其他所需参数,并且我创建了 用户模型、会话控制器和会话视图模板。
我目前正在使用 RestClient Gem 进行 API 调用,我只想将成功 API 调用后的登录信息保存到 session[:user_id] = user.id,但是我遇到错误 undefined #SessionsController 的局部变量或方法“用户”。我想不通是错的。
下面是我的源码
会话控制器
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': params[:username],
'password': params[: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
会话新视图
<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 %>
用户模型
class User < ApplicationRecord
has_secure_password
validates :username, presence: true, uniqueness: true
end
我们将不胜感激任何形式的代码示例帮助。如果需要,我也愿意提供有关此集成的更多信息。提前谢谢你。
【问题讨论】:
-
除非您的 SessionsController 有更多功能,否则实际上您没有定义
user方法。您是否希望它出现在像devise这样的宝石中? -
我期待它可以从
User模型中获得。我只想有一种方法将登录令牌存储到会话 [:user_id] 中,然后在整个用户会话中使用它。
标签: ruby-on-rails api rest-client