O Waterlock é uma biblioteca criada para o Sails que implementa autenticação e JSON Web Token
Sails.js - https://github.com/balderdashy/sails
Waterlock - https://github.com/waterlock/waterlock
Waterlock-auth-local - https://github.com/waterlock/waterlock-local-auth
npm install waterlock
npm install waterlock-local-auth
./node_modules/.bin/waterlock generate all
sails lift
Sails 0.11 | Node 0.10.26 | Waterlock 0.0.10 | Waterlock-auth-local
Exemplo:
module.exports.policies = {
'*': ['sessionAuth'], // Todos os actions não citados sofrem a necessidade de login
fooController:{
'fooAction':true, // Método sem necessidade de login
'fooAction':['sessionAuth'] // Método com necessidade de login
},
// **IMPORTANTE** Se não ativo, não é possivel fazer login pela primeira política
// '*': ['sessionAuth']
Auth:{
'login':true
}
};
As rotas devem sempre estar ligadas as actions dos Controllers e não diretamente as views, já que o Sails não implementa polices ligadas as views, a não ser quando existe um middleware para a view que executa uma ação e sofre com as polices
NOTE: policies apply only to controller actions, not to views. If you define a route in your routes.js config file that points directly to a view, no policies will be applied to it. To make sure policies are applied, you can instead define a controller action which displays your view, and point your route to that action.
NOTE: Just because a request matches a route address doesn't necessarily mean it will be passed to that route's target directly. For instance, HTTP requests will usually pass through some middleware first. And if the route points to a controller action, the request will need to pass through any configured policies first. Finally, there are a few special route options which allow a route to be "skipped" for certain kinds of requests.
Exemplo:
<form class="form-horizontal " action="/auth/login" method="POST">
<input type="email" class="form-control" name="email" id="email" placeholder="Email">
<input type="password" class="form-control" name="password" id="password" placeholder="Senha">
<button type="submit" class="btn btn-primary btn-material-indigo">Entrar</button>
</form>
Exemplo:
<a href='/auth/logout' id='logout-icon' title='Logout'>
Foi implementada uma rota por questões estéticas para ao invés do acesso ser feito através da url /auth/logout para ela ser acessada em /logout