Làm cách nào để xóa hàng loạt người dùng 'bị chặn'?


7

Có một người gửi thư rác liên tục tạo tài khoản trên trang web của tôi. Các tài khoản được 'chặn' theo mặc định để chúng không gây ra vấn đề, và người gửi thư rác cũng không nhận được gì từ họ.

Tuy nhiên, tôi muốn xóa tất cả nhưng không cần phải nhấp vào trang / admin / people 150 lần: hủy tài khoản 50 lần.

Có cách nào để hủy tất cả các tài khoản 'bị chặn' trong một bước không?

Drush chỉ xuất hiện để cho phép tôi hủy từng cái một ...


Bạn có thể dễ dàng làm điều này với một truy vấn mysql ... bạn không muốn đi theo con đường đó chứ?
kevindeleon

Một số câu trả lời tốt ở đây. Là một biện pháp phòng ngừa, để giảm bớt những kẻ gửi thư rác, bạn có thể muốn xem xét mô-đun Are You A Human - khi đăng ký, người dùng chơi trò chơi. Điều này hoạt động trên điện thoại di động quá. Sau đó là cung cấp captcha thông thường và nhuyễn thể. Hi vọng điêu nay co ich!
trị liệu

Cuối cùng tôi đã thực hiện một mô-đun tùy chỉnh cho drupal 7. Trong khu vực quản trị / người có một hình thức mới để hoàn thành thao tác này. Quá với drush. Thêm hướng dẫn ở đây. Liên kết với dự án. Liên kết đến các vấn đề. Xin vui lòng bạn có thể theo dõi chủ đề này trong drupal.org cho các vấn đề hoặc câu hỏi khác quá. Thks.
lgrtm

Có vẻ như mô-đun của bạn có cùng một vấn đề như câu trả lời được chấp nhận, bạn chỉ cần xóa các hàng trong cơ sở dữ liệu mà không cho người dùng hook hook cơ hội chạy.
David L

Bên dưới liên kết được sử dụng để xóa người dùng thư rác. Turnkeylinux.org/blog/deleting-drupal-zombie Trong liên kết trên, mã sẽ cung cấp và mã này sẽ xóa đăng ký người dùng spam. Nhưng mã này được xóa dựa trên trang web bị hack ngày trở đi. Bạn chỉ định ngày. trong một tuần tất cả những người dùng bị chặn sẽ bị xóa
Balachandran

Câu trả lời:


12

Trên trang Mọi người ( quản trị viên / người ), trước tiên, chọn người dùng bị chặn và sau đó từ tùy chọn cập nhật, chọn Hủy tài khoản người dùng đã chọn . (Drupal 7)

Một cách khác là sử dụng mô-đun Lượt xem hoạt động hàng loạt .


3
Làm thế nào đây là câu trả lời được chấp nhận? Không phải OP yêu cầu cụ thể rằng họ không muốn phải chọn 50 người dùng bị chặn cùng một lúc với các hộp kiểm trên trang quản trị / người?
squarecandy

2

Xóa người dùng trực tiếp khỏi cơ sở dữ liệu không phải là một ý tưởng tốt. hoặc được thực hiện thông qua drush hoặc bằng cách tương tác trực tiếp với cơ sở dữ liệu thông qua SQL DELETE. Một số mô-đun, ví dụ, tạo người dùng robot và những người này có xu hướng bị chặn. Chỉ cần xóa chúng có thể can thiệp vào hoạt động của mô-đun và thậm chí làm cho mô-đun thất bại, khiến bạn có dữ liệu mồ côi và thông báo lỗi không thể giải thích.

Khi đăng ký spam xuất hiện dưới dạng người dùng "bị chặn", họ bị chặn vì tài khoản của họ vẫn chưa được xác minh (người gửi thư rác, theo quy định, không bao giờ xác minh, vì vậy tài khoản của họ không bao giờ tiến triển từ trạng thái bị chặn).

Một dự án có tên là LoginToboggan cung cấp cho bạn tùy chọn để người dùng không có giá trị thanh trừng khỏi hệ thống theo một khoảng thời gian xác định trước. Điều này cũng sẽ quan tâm đến bất kỳ kẻ gửi thư rác nào đăng ký trong tương lai, mà không cần phải đưa ra các biện pháp bảo vệ như CAPTCHA, có xu hướng không khuyến khích người dùng hợp pháp đăng ký.

Sử dụng LoginToboggan để loại bỏ hàng loạt người dùng spam sẽ an toàn và mạnh mẽ hơn nhiều so với việc tự hack cơ sở dữ liệu.

Nếu bạn không muốn cài đặt một mô-đun để thực hiện việc này, như một cách thay thế, bạn có thể xóa người dùng chưa được xác minh bằng cách sử dụng drushuser_delete().


+1 cho Đăng nhậpToboggan. / admin / config / system / logintoboggan - đặt "Xóa người dùng không có giá trị sau" thành "1 ngày". Kiểm tra lại vào ngày mai!
squarecandy


2

Đối với Drupal 8 với drush trong Linux (với bash), bạn có thể sử dụng giải pháp sau:

    echo 'select name from users_field_data where status=0 and uid!=0' | mysql --silent drupaldatabase > userlist
    for username in `cat userlist`; do drush user-cancel $username -y; done

Điều này khá chậm (1 người dùng / s) và an toàn. Nó không hoạt động với tên và ký tự UTF-8 đặc biệt có dấu cách.


echo 'select name from users_field_data where status=0 and uid!=0' | psql service=pg_drupal -t > userlistnếu bạn sử dụng PostgreSQL.
jgrocha

2

Đây là những gì tôi đã làm, mà không cần thêm bất kỳ mô-đun bổ sung nào hoặc đến với bất kỳ tập lệnh ưa thích hoặc lệnh bash nào. Rõ ràng, tôi sẽ nhận được rất nhiều sự ghét bỏ vì điều này liên quan đến việc hack lõi tạm thời .

Nhưng đây là cách NHANH NHẤT . Giai đoạn = Stage.

  • chỉnh sửa tệp /modules/user/user.admin.inc
  • tìm kiếm giới hạn và thay đổi 50 thành số cao
  • goto trang web của bạn và trang quản trị người dùng / quản trị viên / người
  • lọc bởi bị chặn
  • xóa bỏ....
  • chuyển số giới hạn trở lại 50, vì các vị thần drupal sẽ không thích nó.

Không phải lo lắng về việc bỏ lỡ bất kỳ móc drupal. Rõ ràng nếu bạn đặt số giới hạn ở mức cao, nó có thể làm sập máy chủ sql của bạn. Vì vậy, thiết lập nó một cách thích hợp. Tôi đã có giá trị 10k của người dùng bị chặn để xóa. Tôi đặt nó thành 5000 và chỉ phải xóa người dùng chỉ trên 2 trang.


Đây là câu trả lời sạch nhất ở đây. Đó là nhanh chóng và loại bỏ drupal hợp lệ. Không có lệnh sql, không có mô-đun thêm.
Matt Coady

0

Nếu bạn chắc chắn rằng tất cả các tài khoản bị chặn cần xóa, thì bạn có thể chạy truy vấn bằng phpmyadmin (hoặc quản trị viên lựa chọn mysql của bạn):

DELETE FROM users WHERE `status` = 0 AND `uid` != 0;

Điều đó sẽ thoát khỏi tất cả các tài khoản bị chặn và để lại người dùng ẩn danh. Tất nhiên, bạn sẽ thấy chắc chắn muốn sao lưu DB của mình trước. Ngoài ra, nhận ra điều này cũng giúp loại bỏ bất kỳ tài khoản nào có thể hợp pháp, nhưng bạn có thể đã đặt trạng thái là 'bị chặn' vì một số lý do.

Lưu ý: Tôi nên nói rằng tôi biết nhiều hơn 6 so với 7. Vì vậy, nếu bảng người dùng khác biệt nhiều trong Drupal 7, điều này có thể không chính xác.


Có, tôi đang ở 7. Và, vâng, tôi sẽ thử điều này đầu tiên trên bản sao thử nghiệm của chúng tôi về trang web.
Jose M Vidal

7
Điều này không cung cấp cho bất kỳ mô-đun nào triển khai hook_user_delete (hoặc hook_user ("xóa") trong Drupal 6) để chạy. Bạn có thể kết thúc với các vấn đề và / hoặc dữ liệu mồ côi trong cơ sở dữ liệu của bạn về việc này thông qua SQL trực tiếp.
mpdon Arena

1
@MPD là chính xác. Tuy nhiên, đó là lý do tại sao tôi nói đảm bảo rằng tất cả các tài khoản 'bị chặn' trên thực tế là các tài khoản SPAM trước khi chạy này. Nếu chúng là những tài khoản mới chưa bao giờ đăng nhập hoặc chạy bất cứ thứ gì, thì nó sẽ ổn thôi ... tuy nhiên ... đó là lý do tại sao tôi nói hãy sao lưu trước. Đó không phải là cách tốt nhất để làm điều đó. Bạn có thể viết một mô-đun tùy chỉnh để loại bỏ tất cả các tài khoản bị chặn thực hiện các móc nối Drupal. Điều đó có thể sẽ sạch hơn, nhưng đây là một cách bẩn nhanh chóng.
kevindeleon

4
Ngay cả khi chúng là tài khoản spam, vẫn có khả năng các mô-đun khác đã thực hiện mọi thứ khi tài khoản được tạo. Ví dụ: mô-đun hồ sơ (và người kế nhiệm) tạo một hoặc nhiều nút cho mỗi người dùng khi tài khoản được tạo. Chúng sẽ vẫn còn trong DB.
mpdon Arena

Gotcha. Điểm tốt.
kevindeleon

0

Đây là giải pháp muộn cho bữa tiệc của tôi, làm thế nào để sử dụng hoàn thành công việc này mà không cần phải thêm vbo. Bản thân lệnh có thể hơi mong manh và có thể bị phá vỡ dưới một số cấu hình nhất định của mysql nhưng bản thân việc xóa sẽ an toàn.

drush sqlq "SELECT uid FROM users WHERE uid >= 629" | grep -v uid|tr '\n' ','|awk '{print "drush ev \"user_delete_multiple(array("$1"))\""}'|sh

cho các nút bạn có thể thay đổi một cách thích hợp

drush sqlq "SELECT nid FROM node WHERE nid >= 435193 AND type='school'" | grep -v nid|tr '\n' ','|awk '{print "drush ev \"node_delete_multiple(array("$1"))\""}'|sh

Lưu ý, bạn cần thay đổi nid / uid trong phần grep cùng với lệnh gọi hàm để lấy một cách thích hợp các giá trị uid / nid.


0

IN drupal 8 bạn phải xóa nội dung cho 3 bảng.

  • đầu tiên tạo một bản sao của cơ sở dữ liệu của bạn
    • bây giờ hãy vào bảng điều khiển phpMyadmin của bạn và chọn cơ sở dữ liệu của bạn
    • Duyệt bảng user_field_data của bạn để xem phạm vi UIDS bạn muốn xóa. thường số UID thấp là người dùng thực sự của bạn ..
    • hiện xóa dữ liệu cho người dùng bị chặn, trong trường hợp của tôi, tất cả người dùng có UID> 240 đều bị chặn
    • sử dụng số SQL này - trao đổi số UID cho trường hợp của bạn. XÓA TỪ users_field_dataKHI uid> = 240
      XÓA TỪ users_data KHI uid> = 240 XÓA TỪ usersKHI uid> = 240
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.