Tôi mới sử dụng các mô-đun dịch vụ và rest_server (và API RESTful hoàn toàn.) Theo tôi hiểu, các bước cơ bản là thế này:
- Gửi yêu cầu bài đăng tới / api / user / đăng nhập với tên người dùng và mật khẩu được đặt trong dữ liệu
- Lưu trữ mã thông báo bạn nhận được trong phản hồi
- Trong các yêu cầu bài đăng tiếp theo, hãy thêm mã thông báo vào tiêu đề bằng khóa X-CSRF-TOKEN
Khi tôi sử dụng tiện ích mở rộng Chrome Postman để làm điều đó, nó hoạt động rất tốt. Khi tôi thực hiện mã, mã api / user / đăng nhập vẫn ổn, tôi nhận được mã thông báo, nhưng khi tôi cố gắng truy cập / api / other / endpoint, tôi nhận được 403 Access bị từ chối vì lỗi ẩn danh của người dùng.
Yêu cầu đầu tiên (/ người dùng / đăng nhập) trông như thế này:
POST /api/user/login HTTP/1.0
Content-Type: application/json
Accept: application/json
User-Agent: Drupal (+http://drupal.org/)
Host: mysiteurl.com
Content-Length: 41
{"username":"NAME","password":"PASSWORD"}
Và yêu cầu thứ hai (/ other / endpoint) trông như thế này:
POST /api/other/endpoint HTTP/1.0
Content-Type: application/json
Accept: application/json
X-CSRF-TOKEN: vGJm5GNDGumf-SoHnLsBU6d46EkrOZkvUY0CSa08GA0
User-Agent: Drupal (+http://drupal.org/)
Host: mysiteurl.com
Content-Length: 0
Nếu tôi thực hiện yêu cầu / người dùng / mã thông báo sau khi xác thực, tôi sẽ nhận được mã thông báo mới mỗi lần. Nếu tôi cố gắng đăng xuất ngay lập tức sau khi đăng nhập (và gửi mã thông báo đó), tôi nhận được "406 Không thể chấp nhận: Người dùng chưa đăng nhập." lỗi. Nó cho tôi biết người dùng chưa đăng nhập.
Nếu tôi kiểm tra trang web, nó cho thấy người dùng đã đăng nhập thành công và vẫn đăng nhập sau khi thực tế.
Tôi có phải lưu / gửi bất cứ điều gì liên quan đến tên phiên / id hoặc cookie không? Mọi thứ tôi đang xem chỉ đề xuất mã thông báo phiên là cần thiết.
Session authentication
dướiadmin/structure/services/list/[my-endpoint]
và xóa tất cả bộ nhớ cache?