Tôi đang cố tạo một API để đăng nhập vào ứng dụng đường ray bằng Devise và authenticatable_token. Tôi tạo ra một SessionsController trong mô-đun API của tôi và viết đoạn mã sau để sign_in:Đăng nhập bằng ứng dụng đường ray với Devise và token_authenticatable: "401 trái phép"
module Api
module V1
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(scope: resource_name, recall: "#{controller_path}#new")
sign_in(resource_name, resource)
if current_user
if !current_user.authentication_token
current_user.reset_authentication_token!
end
render json: {success: true, auth_token: resource.authentication_token, email: resource.email}
else
invalid_login_attempt
end
end
protected
def invalid_login_attempt
warden.custom_failure!
render json: {success: false, message: "Error with your login or password"}, status: 401
end
end
end
end
Vấn đề là ứng dụng đặt ra một 401 khi tôi sử dụng tên đăng nhập mà không cần bất kỳ dấu hiệu.
RestClient.post "http://localhost:3000/api/v1/users/sign_in", {user: {email: "[email protected]", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
Nhưng nếu tôi đặt token được cung cấp bởi đăng ký phương pháp hoạt động:
response_json = RestClient.post "http://localhost:3000/api/v1/users/sign_in?auth_token=#{@token}", {user: {email: "[email protected]", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
Vậy tại sao điều này? Có thể tắt quy trình xác thực mã thông báo khi thực hiện đăng nhập không?
Cảm ơn câu trả lời của bạn. Tôi đã làm theo hướng dẫn trên trang web của bạn nhưng tôi vẫn nhận được 401. Hơn nữa, tôi nhận được lỗi 500 với phương thức 'undefined' split 'cho: failure: Symbol'' từ 'resource = warden.authenticate! (: Scope => resource_name, : recall =>: failure) '. Tôi cũng đã xóa loại nội dung và chấp nhận các chỉ thị từ yêu cầu của tôi và thêm navigational_formats. – obo
Thực ra nó là 'warden.authenticate! ', Nó tăng 401. – obo
Cuối cùng tôi đã thành công. Lỗi của tôi đã được gây ra bởi một tuyến đường sai. Tôi đã phải sử dụng localhost: 3000/api/v1/sign_in thay vì api/v1/users/sign_in. Bằng cách liên kết của bạn và lời khuyên của bạn trong cấu hình đã giúp tôi để có được những điều làm việc một cách chính xác. – obo