Как сохранить параметры HTTP_Basic_Authenticate в пользовательской модели

У меня есть базовое приложение, к которому я хочу, чтобы пользователь мог получить доступ, только если у него есть access_token, который я им дал. В этом примере предположим, что токен является "131313"

Пользователи без access_token могут получить доступ только к странице индекса...

В моей модели User у меня есть следующие столбцы

name:
access_token:
items:

В моем контроллере у меня есть:

http_basic_authenticate_with name: "??not sure???", access_token: "131313", except: :index

Я хочу убедиться, что правильный токен доступа передан "131313", а затем проверить имя, предоставленное пользователем, и перечислить все элементы, связанные с этим пользователем.

т.е. перенаправлены на страницу, которая имеет следующее

@user.each do |user|
  user.item

Я предполагаю, что мне понадобится контроллер с чем-то вроде:

@user = User.find(params[:name])

Чтобы установить мою переменную экземпляра пользователя для моего просмотра и найти их по указанному имени. У меня возникли проблемы с пониманием, возможно ли это сделать с помощью HTTP_Basic_Authentication. Есть ли способ получить предоставленные значения (например, "имя") и сравнить (например, вызов.find) их с базой данных или даже добавить их в базу данных (например, вызов с сохранением)?

Или мне придется развернуть систему полной аутентификации?

1 ответ

Вы добавляете что-то вроде следующего application_controller.rb:

before_action :authenticate, except: :index

private
  attr_reader   :current_user
  helper_method :current_user

  def authenticate
    authenticate_or_request_with_http_basic('MyApplication') do |name, token|
      @current_user = User.find_by(name: name)
      current_user && current_user.access_token == token
    end
  end

Тот current_user Метод всегда возвращает пользователя, вошедшего в систему. Это означает, что вы можете написать что-то вроде следующего в представлении без загрузки @user снова:

  <%= current_user.name %> 
  <% current_user.items.each do |item| %>
    <%= item.name %>
  <% end %>
Другие вопросы по тегам