Para aqueles projetos que não precisam de um grande poder atrás deles usando Rails, é uma idéia maravilhosa usar o Sinatra porque é leve e legal.
Sou novo, trabalho com Rails / Ruby / Sinatra (~ 1 ano atrás) e realmente não sei se existe algo que me ajude a iniciar um novo projeto com algumas coisas ou habilidades incluídas e não começar do zero, de qualquer maneira , Decido criar alguns repositórios para usar como início do projeto, vou explicar agora o que ele contém e se você achou útil, sinta-se à vontade para usar.
Etapas de configuração do diretor
Vou assumir que você já sabe instalar e usar o Sinatra e também tem conhecimento sobre Ruby.
Adicione a gema Warden referente ao seu GemFile
gem "warden", "1.2.1"
Exigir protetor em seu arquivo de aplicativo
require "warden"
Warden usa Rack :: Flash e Rack: Sessão que devemos registrar
use Rack::Session::Cookie, secret: "IdoNotHaveAnySecret"
use Rack::Flash, accessorize: [:error, :success]
Adicione a configuração do Warden ao arquivo do seu aplicativo
use Warden::Manager do |config|
# serialize user to session ->
config.serialize_into_session{|user| user.id}
# serialize user from session <-
config.serialize_from_session{|id| User.get(id) }
# configuring strategies
config.scope_defaults :default,
strategies: [:password],
action: 'auth/unauthenticated'
config.failure_app = self
end
Adicionar estratégias de guarda para: senha
Warden::Strategies.add(:password) do
def flash
env['x-rack.flash']
end
# valid params for authentication
def valid?
params['user'] && params['user']['username'] && params['user']['password']
end
# authenticating user
def authenticate!
# find for user
user = User.first(username: params['user']['username'])
if user.nil?
fail!("Invalid username, doesn't exists!")
flash.error = ""
elsif user.authenticate(params['user']['password'])
flash.success = "Logged in"
success!(user)
else
fail!("There are errors, please try again")
end
end
end
Etapas de configuração de rota
A configuração da rota é a parte fácil, mas importante.
Rotas “obrigatórias” do diretor
# when user reach a protected route watched by Warden calls
post '/auth/unauthenticated' do
session[:return_to] = env['warden.options'][:attempted_path]
puts env['warden.options'][:attempted_path]
flash[:error] = env['warden'].message || 'You must to login to continue'
redirect '/auth/login'
end
# to ensure user logout a session data removal
get '/auth/logout' do
env['warden'].raw_session.inspect
env['warden'].logout
flash[:success] = "Successfully logged out"
redirect '/'
end
Rotas de aplicação
Para proteger um recurso é necessário apenas chamar o método Warden de autenticar!
get '/protected' do
env['warden'].authenticate!
slim :protected
end
Agora, toda vez que o usuário acertar / rota protegida sem autenticação, o Warden o enviará para o formulário de login.
Projeto Inicial
Se você quiser todas essas etapas pré-configuradas para usar como um ponto de partida em seu novo projeto, sinta-se à vontade para bifurcar o repositório e usá-lo
Este repo usa todos esses componentes
- Sinatra Link para Repo
- Warden Link para Repo
- Thin Link para Repo
- Link da Fundação 5 para Repo
- Link Slim para Repo
- Link Flash-Rack para Repo
- Link Sqlite3 para Repo
Qualquer comentário, sugestão ou correção é bem-vindo