Создать простой пароль сайта для Rails - без имени пользователя - PullRequest
0 голосов
/ 05 июля 2018

Я хотел бы защитить сайт с помощью очень простой проверки пароля только при первом посещении сайта пользователем. В настоящее время я использую http аутентификацию, но для этого требуются имя пользователя и пароль. Я могу жестко закодировать пароль в бэкэнде. Основы сайта: местная спортивная лига, где мы храним статистику и информацию о лиге. Просто пытаюсь не допустить "рифф-рафф":)
Я новичок по рельсам, и использую этот сайт как способ обучения. Любая помощь там будет оценена!

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете сделать что-нибудь на основе файлов cookie.

В вашем ApplicationController вы бы внедрили метод определения наличия файла cookie, который указывает, что посетитель ввел ваш пароль - если файл cookie отсутствует, вы будете перенаправлены на страницу пароля:

class ApplicationController < ActionController::Base

  def require_password_verification
    unless cookies[:visitor_password_verified]
      return redirect_to <whatever your passwords#new path is>
    end
  end

end

Контроллер для вашей страницы пароля будет выглядеть примерно так:

class PasswordController < ApplicationController
  def new
    # Nothing needed here because all your #new view needs is a password field
  end

  def create
    unless params[:password].present?
      return redirect_back(fallback_location: root_path, alert: 'Password is required.')
    end

    if params[:password] == Rails.configuration.visitor_password
      cookies[:visitor_password_verified] = true
      redirect_to(root_path, notice: 'Password verified.')
    else
      cookies.delete(:visitor_password_verified)
      redirect_back(fallback_location: root_path, alert: 'You've entered the wrong password.')
    end
  end
end

Ваш пароль будет храниться в файле application.rb, например:

config.visitor_password = '12345'

Обычно вы никогда бы не хранили пароль таким образом, потому что он вообще не защищен, но, учитывая ваш случай использования, это, вероятно, хорошо, так как наличие одного пароля для всех уже небезопасно. ? Однако, если вы захотите повысить уровень безопасности, я бы порекомендовал сохранить ваш пароль в переменной среды, а затем вы можете установить пароль следующим образом:

config.visitor_password = ENV['VISITOR_PASSWORD']

Таким образом, по крайней мере, ваш пароль не будет жестко запрограммирован и доступен для любого, кто смотрит на ваше, предположительно общедоступное репо.

И тогда вы можете потребовать куки "пароль был введен" для любых просмотров, которые вы хотите, так:

class LeagueStatsController < ApplicationController

  before_action :require_password_verification

  def index
    # Whatever
  end
end

Если кто-то заходит на вашу страницу league_stats#index, то он сначала проверит, чтобы убедиться, что файл cookie visitor_password_verified присутствует и имеет значение true. Если это так, то они дойдут до вида. Если это не так, они будут перенаправлены на вашу страницу passwords#new.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...