2011-10-26 31 views
7

Tôi gặp khó khăn khi tìm một hướng dẫn đơn giản về cách bật xác thực mã thông báo truy cập đơn bằng cách sử dụng tính năng tự động. Có một số tài liệu nhưng nó không phải là rất hữu ích.Mã thông báo truy cập tự động và duy nhất

tôi thêm single_access_token để db của tôi, tôi đã thêm này:

single_access_allowed_request_types :any 

đến lớp Session của tôi. nhưng tôi vẫn không hiểu cách người dùng được xác thực bằng thông tin xác thực được truyền qua mọi cuộc gọi. Yêu cầu xác thực của tôi trước bộ lọc thực hiện kiểm tra chuẩn cho current_user như sau:

def current_session 
    return @current_session if @current_session 
    @current_session = Session.find 
    end 

    def current_user 
    @current_user = current_session && current_session.record 
    end 

Nhưng điều đó có đủ để làm việc không? Có phải phương thức Session.find thực hiện phép thuật để đăng nhập người dùng dựa trên các tham số của tôi hay tôi phải tạo ra phương thức riêng để kiểm tra xem tham số user_credentials có ở đó không và sau đó tìm người dùng dựa trên nó và sau đó đăng nhập người dùng đó. Tôi bối rối nếu tôi thực sự đang "tạo" một phiên mới mỗi khi tôi sử dụng SAT hoặc nếu tôi chỉ cài đặt người dùng hiện tại vào bộ lọc trước mỗi lần thực hiện cuộc gọi API.

Mọi trợ giúp đều tuyệt vời! Cảm ơn!

Trả lời

2

Tôi đã triển khai giải pháp single_access_token với tính năng tự động sửa lỗi và những gì tôi phải làm là thêm single_access_allowed_request_types :all vào mô hình UserSession.

Sau đó, tôi đã thêm phần sau vào bộ điều khiển nơi tôi muốn cho phép xác thực single_access_token.

def single_access_allowed? 
     ["some_action_1","some_action_2","some_action_3"].include?(action_name) 
    end 

Có vẻ như bạn thiếu mã điều khiển. Vì vậy, nếu bạn có hai hành động "get_user_info" và "update_user_info", bạn sẽ thêm.

def single_access_allowed? 
     ["get_user_info","update_user_info"].include?(action_name) 
    end 
+0

Daniel, công việc này có hiệu quả không?Nếu không cho tôi biết bạn đang gặp phải vấn đề gì và tôi sẽ cố gắng giúp đỡ. Cảm ơn! –

3

Điều duy nhất tôi phải làm làm cho công việc này là

  • thêm một lĩnh vực được gọi single_access_token để tôi sử dụng bàn
  • thêm một phương pháp gọi là single_access_allowed? cho mỗi bộ điều khiển nơi truy cập duy nhất nên được phép.

Phương pháp này sẽ trông như thế này:

# method for authlogic: defines for which action the single-access-token can be used 
def single_access_allowed? 
    (action_name == "deliver") || (action_name == "delivery_status") 
end 

Tôi không cần phải thêm bất cứ điều gì trong UserSessionsController hoặc đối tượng UserSession. Authlogic xử lý điều đó cho bạn. Chỉ với một yêu cầu truy cập chỉ một yêu cầu được xác thực, do đó, không có một phiên liên tục. Mỗi yêu cầu phải gửi mã thông báo truy cập đơn. Do đó tên: một mã thông báo để có một quyền truy cập duy nhất :)

Hy vọng điều này sẽ hữu ích.

0

Mã nguồn của authlogic là tài liệu tốt nhất trên mã thông báo truy cập đơn. This is the specific section that discusses it.

Bạn sẽ cần phải thêm phương thức riêng được gọi là single_access_allowed? trong bộ điều khiển nơi bạn đang cố gắng cho phép người dùng truy cập. Mã thông báo truy cập đơn được chuyển theo mặc định dưới dạng tham số được mã hóa URL bằng tên user_credentials. Vì vậy, để nhấn bộ điều khiển của bạn mà không cần đăng nhập, nó sẽ là /your_route/?user_credentials=xxxxxx

Các vấn đề liên quan