#ruby-on-rails #authentication #webserver
#ruby-on-rails #аутентификация #веб-сервер
Вопрос:
Я хотел бы использовать веб-сервер, основанный на Rails. Но я понятия не имею о том, как проверить идентификацию пользователя.
Например, пользователь с именем Guest мог выполнять только такие действия, как GET и UPDATE, для определенных таблиц, в то время как другой пользователь с именем Admin мог выполнять все возможные действия, такие как POST .
Я новичок в этой области, но я слышал, что некоторые технические средства, такие как внедрение SQL, могут угрожать безопасности веб-сервера.
Итак, не могли бы вы рассказать мне, как проверить аутентификацию и как зашифровать пароль, введенный пользователем?
Комментарии:
1. вы могли бы попробовать драгоценные камни ACL, такие как devise и declarative_authentication
2. Devise на самом деле не является ACL, это обычная аутентификация.
Ответ №1:
Кажется, вам нужны аутентификация и авторизация.
Для проверки подлинности:
https://github.com/plataformatec/devise
https://github.com/vpereira/authlogic
https://github.com/thoughtbot/clearance
Для авторизации:
https://github.com/be9/acl9
https://github.com/ryanb/cancan
Ответ №2:
Это, строго говоря, из моего личного опыта. Я перепробовал все предлагаемые способы аутентификации и авторизации, упомянутые выше, но я всегда приходил к выводу, что просто написать это самостоятельно не более и не менее сложно, особенно когда ваши требования очень просты. Рассмотрим это:
class ApplicationController < ActionController::Base
before_filter :authentication
def authentication
redirect_to '/authentication_form' unless session[:logged_in]
end
def authentication_form
... render the form
end
def login
if params[:username] == 'adam' amp;amp; params[:password] == 'eva'
session[:logged_in] = true
redirect_to '/restricted_area'
else
render :action => 'authentication_form'
end
end
end
class RestrictedController < ApplicationController
def index
... this action is now restricted
end
end
Это, конечно, не полный процесс, но он демонстрирует, насколько простой может быть аутентификация с rails. Вместо проверки пользователей и паролей с помощью кода контроллера вы могли бы запросить базу данных следующим образом:
if User.find_by_name_and_password(params[:username], params[:password])
session[:logged_in] = true
...
Для авторизации вам нужно будет сохранить идентификатор пользователя в хэше сеанса, который позволяет вам ограничивать доступ изнутри каждого действия (при условии, что контроллер является производным от ApplicationController)
Я надеюсь, это поможет.
Комментарии:
1. Привет, mosch, иметь подобный код довольно просто. Но мне интересно, безопасно ли это, нужна ли нам еще какая-то дополнительная работа при проверке учетных данных? Я думаю, мне лучше проверить стандартную.
2. Я бы посоветовал не хранить обычный пароль в базе данных. Например,
Digest::SHA1.hexdigest(password)
выполняет эту работу отлично. Кроме того, я не рекомендую использовать стандартные решения для аутентификации. Я полагаю, это сильно зависит от вашего сценария. Если вы решите использовать gem для аутентификации, вам следует взглянуть на devise, который даже предоставляет действия и представления.