همیشه یکی از نیاز های اساسی یک استارتاپ ، توسعه بخش API آن است.این امر باعث می شود به سرعت توسعه دهندگان دیگر در پروژه ها از امکانات وب سایت شما استفاده کرده ، در نتیجه باعث پیشرفت سریع استارتاپ و فروش محصولات می شود.
اگر در حال توسعه یک استارتاپ در بستر وردپرس هستید می بایست این امکان را WP REST API پیاده سازی کنید.بهترین الگو را در این زمینه میتوان ایجاد یک API Token برای دیگر اعضا دانست.اگر چه REST API وردپرس در حالت عادی از Basic Authentication که با ورودی نام کاربری و رمز عبور استفاده می شود. اما الگورریتم های جدید تری به نام JWT وجود دارد که بسیاری از استارتاپ ها مانند اینستاگرام ، میلرلایت و … به سمت آن حرکت کرده اند.
در این مقاله هدف من طرح مسئله ایجاد Token و دسترسی کاملا امن به هر کاربر ، توسط یک کد رمز در بستر WordPress Rest Api می باشد.
بیایید شروع کنیم اولین قدم این است که برای هر کاربر یک کد API Token ایجاد کنیم.طبق مستندات وردپرس ، مکان قرارگیری اطلاعات اضافی کاربران وردپرس در جدول Usermeta می باشد.ما هم یک نام کلیدی مثل “api_token” را انتخاب می کنیم و برای هر کاربر این کد را ایجاد می کنیم.
ابتدا در جدول لیست کاربران مدیریت وردپرس (Users.php) ، یک ردیف جدید به نام API Token ایجاد می کنیم تا بتوانیم کد API هر کاربر را نمایش دهیم یا در صورت لزوم ایجاد کنیم.ابتدا توسط فیلتر وردپرس manage_users_columns یک ردیف جدید ایجاد می کنیم.
add_action('manage_users_columns','wp_add_user_column');
function wp_add_user_column($columns) {
$columns['user_auth_key'] = "Api token";
return $columns;
}
حال برای شناسه user_auth_key ، جهت نمایش API Token کاربران دستورات لازم را می نویسیم :
add_filter('manage_users_custom_column', 'user_posts_count_column_content', 10, 3);
function user_posts_count_column_content($output,$column_name,$user_id) {
if($column_name =="user_auth_key") {
/* Set Auth Key For User */
if( isset($_GET['set_user_token']) and $_GET['set_user_token'] ==$user_id) {
update_user_meta($user_id, 'api_token', wp_generate_password(50, false));
}
$user_token = get_user_meta($user_id, "api_token", true);
if($user_token !="") {
$output = $user_token;
} else {
$output = '<a href="'.admin_url('users.php?set_user_token='.$user_id).'" class="button button-primary">Get Token</a>';
}
}
return $output;
}
در کد بالا گفته شده اگر در ردیف user_auth_key باشیم ابتدا چک شود کاربر یک User meta به نام api_token در بانک اطلاعاتی دارد یا خیر ؟
اگر وجود داشت که آن را نمایش بدهد در غیر این صورت یک دکمه ایجاد کردیم تا مدیریت بتواند برای کاربر token ایجاد کند.
همیشه token می بایست یک عبارت تصادفب باشد یه همبن دلیل من از تابع wp_generate_password برای ایجاد عبارت 50 کاراکتری تصادفی استفاده کردم.
می خواهیم یک مسیر جدید در وردپرس REST API ایجاد کنیم که در آن کاربر ابتدا Token خود را به صورت Header درخواست ارسال کند و مشخصات پروفایل خود را در وب سایت خود به نمایش در بیاورد.برای ایجاد مسیر از اکشن rest_api_init استفاده می کنیم.
add_action( 'rest_api_init', 'add_custom_users_api');
function add_custom_users_api(){
register_rest_route( 'method', '/get_user/', array(
'methods' => 'GET',
'callback' => 'get_custom_users_data',
));
}
ابتدا توسط تابع register_rest_route یک مسیر جدید ایجاد کردیم.برای خروجی این مسیر با فرض این که دامنه ما Realwp.net باشد به صورت زیر در می آید :
https://site.com/wp-json/method/get_user/
شاید شما هم مثل من از عبارت wp-json در آدرس وب سرویس خوشتان نیاید.جهت تغییر این کلید از فیلتر rest_url_prefix استفاده کنیم.دقت کنید بعد از قرار دادن این کد حتما می بایست در تنظیمات پیوند یکتا وردپرس وارد شوید و یک بار دکمه ذخیره پیوند ها را بزنید تا آدرس دهی ها بروز شوند.
add_filter( 'rest_url_prefix', 'change_wp_json_prefix_url');
function change_wp_json_prefix_url( $slug ) {
return 'api';
}
با تغییر بالا ، آدرس مسیر ما به این شکل تغییر می کند.
https://site.com/api/method/get_user/
اگر به اکشن ایجاد مسیر دقت کنید در پارامتر callback مشخص کردیم که اطلاعات برای تحلیل به تابع get_custom_users_data ارسال شود.این تابع را به شکل زیر می نویسیم :
function get_custom_users_data(){
//Check Authoration
$header = getallheaders();
//check Authorization
if (array_key_exists("Authorization",$header) ===false)
{
return new WP_Error( 'error', 'Token Not found', array( 'status' => 404 ) );
}
//Check User token
$user = get_users([
'meta_key' => 'api_token',
'meta_value' => $header['Authorization'],
'number' => 1
]);
if(count($user) ==1) {
$result = [
'status' => 'yes',
'data' => [
'name' => $user[0]->display_name,
'date_register' => parsidate("Y-m-d", $user[0]->user_registered, "eng"),
'email' => $user[0]->user_email,
]
];
return new WP_REST_Response($result, 200);
} else {
return new WP_Error( 'error', 'Token is wrong', array( 'status' => 404 ) );
}
}
طبق مستنداتی که به کاربران وب سرویس خود ارایه می دهید آن ها را مجاب کنید که کلید توکن token خود را در خواست به صورت Header با کلید Authorization ارسال کنند. در خط ابتدایی این توسط تابع php به نام getallheaders ، مقادیر هایی که به صورت Header به این تابع ارسال شده است را چک میکند در صورتی که پارامتر Authorization وجود نداشت کاربر با پیغام خطا مواجه می شود.
بعد از آن می بایست چک کنیم که آیا کاربری با این توکن token در بانک اطلاعاتی وردپرس وجود دارد یا خیر .در اینجاست که توسط تابع get_users بررسی می کنیم که آیا کاربری با چنین متایی وجود دارد یا خیر در صورت وجود ، اطلاعات پروفایل کاربری در قالب json بازگردانده می شود.در شکل زیر تست این مسیر در نرم افزار postman را مشاهده می کنید :
تاریخ ثبت نام را بصورت شمسی نمایش دادیم.برای توسعه وب فارسی در وردپرس می توانید از مقاله استفاده از افزونه پارسی دیت در زیر استفاده کنید :
حتما بخوانید : چگونه با افزونه پارسی دیت ، استارت آپ های وردپرس فارسی را توسعه دهیم ؟
حال نوبت به آن می رسد که یک فایل پی دی اف برای وب سرویس خود ایجاد کنید تا دیگر برنامه نویسان بتوانند از این قابلیت در سایت یا اپلیکیشن خود کنند.برای مثال بالا کافیست بیان کنید یک درخواست به صورت GET به آدرس ارسال نموده که مقدار Header آن برابر با Token کاربری شما باشد.من این کار را توسط تابع Curl در php بصورت زیر انجام می دهم :
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://site.com/api/method/get_user/",
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_CUSTOMREQUEST => "get",
CURLOPT_POSTFIELDS => "",
CURLOPT_HTTPHEADER => array(
"Authorization: XYC6yzl6Vs9sUdHEKXybxf9x19e6KuypcdpsTCdo",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$result = json_decode($response, true)['data'];
foreach($result as $key => $value) {
echo $key." : ".$value;
echo "<br>";
}
اگر در مروگر این کد را اجرا کنیم خروجی نهایی آن بصورت زیر در می آید :
اگر دانش کافی در Rest API وردپرس داشته باشید براحتی می توانید وب اپلیکیشن های بینظیر در کنار Vuejs یا React ایجاد کنید و توسعه استارتاپ خود را مبتنی بر هسته ی وردپرس به طور چشم گیری افزایش دهید.
همان طور که می دانید افزونه ووکامرس درنسخه های اخیر یک تغییر عمده در سفارشات…
در زمان تهیه افزونه های وردپرس برای اتصال نرم افزار حسابداری به سیستم فروشگاهی ووکامرس…
بالاخره در نسخه ی وردپرس 7.0 سرویس اتصال به سرویس هی خارجی مانند هوش مصنوعی…
تا به حال شده با دلنگرانی در داشبورد سایت وردپرسیتان بنشینید، چون بخشی از سایت…
شاید شما هم این صحنه را دیده باشید که تیم محتوا با شوق فراوان مقالهای…
صبح زود از خواب بیدار میشوید، قهوهتان را برمیدارید و مثل همیشه سری به سرچ…