Hiểu về đăng nhập thông qua API REST


7

Tôi đang đọc này bài viết. Tôi muốn biết cách đăng nhập bằng API REST trong Drupal 8 hoạt động. Theo mặc định, khi người dùng đăng nhập, Drupal sẽ xác minh tên người dùng và mật khẩu. Sau khi đăng nhập, trình duyệt có cookie cho phiên đã tạo.

nhập mô tả hình ảnh ở đây

Với API REST, làm thế nào Drupal 8 có thể xác minh người dùng lần đầu tiên họ đăng nhập? Sau khi đăng nhập, làm thế nào để kiểm tra đăng nhập hiện tại?


1
Thực tế cũng giống như vậy - nó cung cấp cho bạn mã thông báo khi bạn đăng nhập / yêu cầu mã thông báo CSRF, sau đó bạn gửi cookie / tiêu đề cùng với các yêu cầu tiếp theo có chứa các giá trị đó
Clive

Cám ơn bạn vì đã giúp. Tôi là người mới, vì vậy có thể giúp tôi chi tiết hơn. Làm cách nào để có được mã thông báo CSRF, gửi mã thông báo CSRF lên máy chủ.
Jonh

John, bạn có cần thêm thông tin hoặc làm rõ câu trả lời của tôi dưới đây không? Tôi rất vui khi cải thiện nó nếu được yêu cầu.
imclean

Tại sao tiêu đề của câu hỏi được thay đổi để xóa "API REST"? Câu hỏi cụ thể là về API REST.

@imclean Tiêu đề câu hỏi không cần chứa tất cả các chi tiết, điều này thực tế là không thể. Sau đó, chúng tôi không cần các thẻ được báo cáo trong tiêu đề.
kiamlaluno

Câu trả lời:


12

Đăng nhập vào Drupal bằng cách gửi thông tin đăng nhập của người dùng. Đảm bảo bạn đặt tiêu đề "Loại nội dung". Điều này bắt đầu phiên của người dùng.

POST URL:

/user/login?_format=json

Tiêu đề:

Content-Type: application/json

POST dữ liệu:

{
  "name": "username",
  "pass": "password"
}

Phản ứng thành công:

{
  "current_user":{
    "uid": "1",
    "roles":[
      "authenticated",
      "administrator"
    ],
    "name": "username"
  },
  "csrf_token":   "asda09820380_2238019280dk09n908asjdlkajdaoa",
  "logout_token": "asdasd09a8sdaslkdasl-asdasdklsajdlkasdjlksj"
}

Sử dụng mã thông báo CSRF trong các yêu cầu GET, POST, PATCH, DELETE, vv tiếp theo bằng cách đặt tiêu đề:

X-CSRF-Token: asda09820380_2238019280dk09n908asjdlkajdaoa

Để đăng xuất, sử dụng mã thông báo đăng xuất trong yêu cầu POST. Điều này kết thúc phiên của người dùng.

/user/logout?_format=json&token=asdasd09a8sdaslkdasl-asdasdklsajdlkasdjlksj

NHẬN trạng thái đăng nhập:

/user/login_status?_format=json

Nhận được mã thông báo:

/rest/session/token

Người giới thiệu:


Điều đó là tốt. Nhưng là khó khăn cho người mới. Bạn có thể lấy thêm thông tin về đăng nhập với người đưa thư. Bảng phiên phiên lưu trữ có đăng nhập. Và thoát đăng nhập. Bạn không thể đăng nhập lại và có thể trả lại bất kỳ phản hồi nào.
Jonh

Người đưa thư có thể là một câu hỏi riêng biệt. Nhưng thoạt nhìn, nó không tự động lưu lịch sử yêu cầu và phản hồi, do đó bạn cần nhấp vào "Lưu" theo cách thủ công mỗi lần. Tôi sử dụng Restlet Client . Trong Postman, đảm bảo bạn chỉ thêm tiêu đề "Kiểu nội dung" và đối với loại cơ thể, nhấp vào "thô". Bạn cần "Lưu" từng phản hồi để có thể sử dụng lại mã thông báo. Các phiên Drupal được quản lý theo cách tương tự như bình thường. Phía khách hàng bạn cần quản lý mã thông báo theo cách thủ công cho phiên.

Không có cookie nào được đặt với REST trừ khi ứng dụng của bạn đặt chúng. Sử dụng mã thông báo thay thế.

@Jonh Có vẻ như Postman không hỗ trợ lưu các phản hồi REST nên tôi khuyên bạn nên sử dụng máy khách Restlet. Xem: Lưu phản hồi bên trong lịch sử và các bộ sưu tập
imclean

1
Tôi tìm thấy một số vấn đề. Các phiên của bảng : Trình xử lý phiên của Drupal đọc và ghi vào bảng phiên. Mỗi bản ghi đại diện cho một phiên người dùng, ẩn danh hoặc xác thực. Trình điều khiển / phần còn lại / phiên / mã thông báo luôn trả về giá trị (bất kỳ người dùng ẩn danh hoặc xác thực). Vì vậy, nếu bạn nhận được mã thông báo, bạn cần đăng nhập với người dùng trước. Khi / user / login_status? _Datat = json trả về giá trị 1. Bạn không thể đăng nhập lại để nhận mã thông báo. Bạn cần đăng xuất. Nếu không thể đăng xuất. Bạn có thể trống phiên phiên.
Jonh

1

Phiên bản lõi Drupal: 8.x-4.x

Bạn cần kích hoạt dịch vụ đăng nhập người dùng trước tiên, điều này có thể được thực hiện bằng nhiều cách, tôi thích sử dụng mô-đun REST UI .

Truy cập / admin / config / services / rest và bật tài nguyên User Rest.

Sau khi kích hoạt, bạn có thể truy cập / admin / config / services / rest / resource / entity% 3Auser / chỉnh sửa bằng cách nhấp vào Chỉnh sửa bên cạnh tài nguyên Người dùng . Đảm bảo bật phương thức GET .

nhập mô tả hình ảnh ở đây

Bây giờ bạn đã thiết lập mọi thứ, bạn có thể bắt đầu sử dụng dịch vụ bằng cách chạy lệnh này trong thiết bị đầu cuối hoặc bằng cách sử dụng bất kỳ ứng dụng nào cho các yêu cầu cuộn tròn như: PostmanRestlet client.

LƯU Ý : Mã thông báo CSRF có thể được lấy từ: / rest / session / token

curl -i -L -X POST \
  -H "Content-Type:application/json" \
  -H "Accept:application/json" \
  -H "X-CSRF-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  -d \
     '{
       "name": "my_username",
       "pass": "my_password"
     }' \
'http://SITE-URL/user/login?_format=json'

Các đối tượng trả lại như sau:

THÀNH CÔNG :

{
  "current_user": {
  "uid": "1",
    "roles": [
      "authenticated"
    ],
    "name": "Admin"
  },
  "csrf_token": "bbbbbbbbbbbbbbbbbbbbbbbbbb",
  "logout_token": "ccccccccccccccccccccccccc"
}

THẤT ​​BẠI :

{
  "message":"Sorry, unrecognized username or password."
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.