2011-12-14 52 views
8

Trong suy nghĩ, làm cách nào để tôi truy cập mã thông báo xác thực của người dùng. Khi cuộc gọi ajax khởi tạo phiên người dùng, tôi cần có thể nhận mã thông báo xác thực từ người dùng. Tôi đã cố gắng để làm những việc như thêm: token_authenticable trong mô hình của tôiMã thông báo xác thực Devise

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

cũng thêm các thuộc tính của những cái tên như: authentication_token, và: authenticity_token để attr_accessible. Nhưng mỗi khi tôi cố gắng để gọi authentication_token hoặc authenticity_token này ra khỏi người dùng với user.auth ... tôi nhận được lỗi như thế này

NoMethodError: undefined method `authentication_token' for #<User:0x000001016b1140> 

Xin lỗi, tôi cần phải nhận mã thông báo này để gửi với các cuộc gọi ajax của tôi, (dự án cuối cùng tôi làm việc trên tôi đã có một giải pháp cực kỳ Bootleg nơi devise đã gần như bị xé ra khỏi ứng dụng, tôi chỉ cần cái này chết tiệt token)

+0

tôi có vấn đề tương tự, hãy cho tôi biết nếu bạn tìm thấy giải pháp, tài liệu đọc không tốt có sẵn – Kevin

+1

token_authenticatable đã bị khấu hao như được thấy ở đây: http://stackoverflow.com/questions/18931952/devise-token-authenticatable- deprecated-what-the-the-alternative – dane

Trả lời

8

này được cố định bằng cách bao gồm các module :token_authenticatable vào mô hình devise sử dụng:

devise :token_authenticatable, ... 

Ngoài ra phương thức được định nghĩa trên chính lớp đó, không phải là một cá thể. Gọi nó là User.authentication_token.

Xem tại đây: https://github.com/plataformatec/devise/blob/master/lib/devise/models/token_authenticatable.rb#L61-63.

+0

tốt, xin lỗi nếu tôi nghe có vẻ hơi chậm, nhưng để kiểm tra ai là người dùng cụ thể, tôi có nên tạo thuộc tính có tên auth_token và nói user.auth_token = User.authentication_token. Sau đó sử dụng điều này để xác minh người dùng thực sự là ai. bởi vì nó có vẻ như đã được đưa ra đã làm cho tham số được gửi bất cứ khi nào tôi thay đổi một cái nhìn, nhưng tôi không thể làm điều đó bằng một cuộc gọi ajax – jack

+0

Phương thức authentication_token tồn tại trên cả cá thể và lớp. Sử dụng phương thức instance user.reset_authentication_token! để đặt mã thông báo (về cơ bản là user.authentication_token = User.authentication_token), nên đưa ra phần xử lý thực tế: "mysite.com/user/1/edit?auth_token=#{user.authentication_token}" – Homan

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