#21 Super Simple Authentication
No episódio anterior mostramos-lhe como mostrar ou ocultar os links de administração, dependendo se o usuário atual é um administrador. Nós fizemos isso escrevendo um método booleano chamado admin?
em nosso ApplicationController
. Se admin?
for verdade(true), então retorna os links que foram mostradas, caso contrário, eles retornam escondidos. Deixamos apenas o método retornando true; o que precisamos fazer é terminar de escrever esse método e fornecer um meio para os usuários da administração possam fazer logon no site.
Há mais de uma maneira de se fazer
Há muitas maneiras de implementar o sistema de login. Podemos implementar um sistema de registro de todos os usuários com um modelo de usuário
, uma página de registro e assim sucessivamente. Se tivéssemos que adotar essa abordagem há é um excelente plugin chamado restful_authentication
, disponível para download.1 Uma vez instalado, o modelo do usuário e um controlador chamado Sessions podem ser gerados como este.
$script/plugin install git://github.com/technoweenie/restful-authentication.git restful_authentication $script/generate authenticated User sessions $rake db:migrate
Nós não estaremos utilizando o Restful Authentication aqui. O plugin restful_authentication
será discutido no epsódio 67.
Nosso site é tão simples que um sistema de administração de todos os usuário não é necessário. Nós só precisamos administrar os episódios no site, então iremos para uma abordagem mais simples que não precisa de um modelo de utilização ou qualquer plugins. Se quiséssemos fazer uma abordagem realmente básicas, poderiam restringir o acesso por endereço de IP, e escrever o nosso método admin?
como este.
def admin request.remote_ip == "127.0.0.1" end
Isto é bastante limitando, pois supõe que a sua conexão com a Internet tem um endereço de IP estático e que você sempre vai querer administrar seu site a partir do mesmo local. Em vez disso, vamos criar uma simples página de login que só tem uma senha. Se a senha for digitada corretamente então o usuário irá ver os links de administração.
Nossa página básica de login.
Para fazer isso, vamos gerar um controlador de Sessões. O código do controller está abaixo.
class SessionsController < ApplicationController def new end def create session[:password] = params[:password] flash[:notice] = ’Successfully logged in’ redirect_to home_path end def destroy reset_session flash[:notice] = ’Successfully logged out’ redirect_to login_path end end
Há também uma view básica na pasta /views/sessions
.
<% form_tag sessions_path do %> Password: <%= password_field_tag :password %> <%= submit_tag "Login" %> <% end %>
O formulário é submetido à ação create
, que armazena a senha digitada na sessão, então redirecionará para a página inicial. Em nosso método admin?
, nós verificamos a senha na sessão for contra a senha correta, e retornar true se eles combinam.
def admin? session[:password] == "secret" end
Feito!
Nossa página básica de login já está concluído. Embora não tão sofisticado como um sistema completo de gerenciamento de usuários como aquele fornecido por Restful Authentication, é bom o bastante para funcionar para o nosso site simples.
Finalmente, caso você esteja se perguntando como podemos ver a página de /login pela URL, é feito através da adição dessas duas rotas no arquivo routes.rb
map.connect ’login’, :controller => ’sessions’, :action => ’create’ map.connect ’logout’, :controller => ’sessions’, :action => ’destroy’