2014-10-06 24 views
5

Tôi khá mới ở cánh buồm, nhưng sau khi đọc tài liệu và làm theo một số ví dụ tại Internet, tôi quyết định cung cấp cho nó một shot;)Sails REST API với AUTH đơn giản

Tôi đã tạo một APP phụ thuộc trên một webservice REST mà tôi muốn xây dựng trong Sails Framework - nhưng sau rất nhiều nghiên cứu tôi chưa tìm thấy các giải pháp phù hợp trong các cánh buồm.

Tôi nghĩ mình muốn chuyển (tên người dùng, mật khẩu) hoặc api_key trong mỗi cuộc gọi webservice được tạo từ ứng dụng?

Tất cả các ví dụ mà tôi tìm thấy chỉ với phương thức đăng nhập phiên - không phải bằng khóa API trong mỗi cuộc gọi.

tôi đã sử dụng hướng dẫn này - http://jethrokuan.github.io/2013/12/19/Using-Passport-With-Sails-JS.html

Nhưng chỉ đăng nhập tại bưu điện đến trang đăng nhập - Tôi muốn nó để đăng nhập trong mỗi cuộc gọi và vẫn muốn sử dụng xây dựng trong bản thiết kế REST API.

Các vấn đề trong giải pháp của tôi là một lời kêu gọi như thế này - sẽ không cho tôi tất cả những người sử dụng như mong đợi vì các phương pháp REST của mặc định - Tôi muốn nó auth người dùng và đưa cho tôi kết quả ..

http://example.com:1337/user/?username=test&password=xxx

"Thực tiễn tốt nhất" để xây dựng APP với chương trình phụ trợ webservice REST là gì? - "với những cánh buồm"

Một số mã auth của tôi:

// policies/authentication.js 
if(req.param('username') && req.param('password')) { 
    UserAuth.auth(req, res, function(err, user) { 
     if (err) return res.forbidden('You are not permitted to perform this action.'); 

     if(user) { 
     return next(); 
     } 
    }); 
    }else{ 
    return res.forbidden('You are not permitted to perform this action.'); 
    } 

// services/UserAuth.js 

module.exports = { 

    auth : function(req, res, cb) { 

    var bcrypt = require('bcrypt'); 
    var passport = require("passport"); 

    passport.authenticate('local', function(err, user, info){ 

     if (err) return cb({ error: 'auth error!', status: 400 }); 

     if(user) { 
     cb(null, user); 
     } 

    })(req, res); 

    } 
} 

// config/policies.js 
module.exports.policies = { 

    '*': "authentication" 
}; 
+0

Đây có phải là một câu hỏi hộ chiếu? Bạn có nên cho nó thẻ hộ chiếu không? – Meeker

Trả lời

3

Trước hết, đó là thói quen xấu để không ngừng tiếp xúc với tên người dùng và mật khẩu trong tự nhiên như điều này. Ít nhất, bạn nên cân nhắc việc cấp access_tokens hết hạn sau một thời gian và cần được cấp lại thông qua hệ thống đăng nhập.

Thứ hai, nếu bạn muốn xác thực trên mọi yêu cầu (thay vì sử dụng phiên), tốt hơn bạn nên sử dụng tiêu đề yêu cầu , thay vì đặt thông tin đăng nhập vào chuỗi truy vấn. Điều này đặc biệt đúng khi sử dụng bản thiết kế Sails; nếu không bạn sẽ phải làm thêm công việc để keep the blueprints from using your credentials as search criteria.

Khi sử dụng tiêu đề, ủy quyền theo yêu cầu trở nên đơn giản với Sails. Thiết lập một chính sách trong api/chính sách gọi (ví dụ) auth.js:

module.exports = function (req, res, next) { 

    // Find an access header 
    var accessToken = req.header('my-auth-header'); 
    // No header, no access 
    if (!accessToken) {return res.forbidden();} 

    // Find the user with that token 
    User.findOne({accessToken: accessToken}) 
     .exec(function(err, user) { 
     // Handle error 
     if (err) {return next(err);} 
     // Handle bad access token 
     if (!user) {return res.forbidden();} 
     // Handle success 
     return next(); 
     }); 

} 

Sau đó, bạn có thể đặt bất cứ hành động điều khiển cần xác thực bằng cách sử dụng config/policies.js file:

module.exports = { 

    SomeController: { 
     '*': 'auth' 
    }, 
    ...etc... 
} 
Các vấn đề liên quan