من سایتم با لاراول ۵.۷ نوشتم . لاراول بلدم فقط api و وب سرویس رو نمیتونم چطوری پیاده سازی کنم
مثلا تو روت api مسیر مشخص میکنم که مثلا کار آدرس
www.domain.ir/api/user
رو زد لیست کاربران رو به صورت json بهش برگردونه
خب ولی وقتی جایی لازمه از کاربر اطلاعات ارسال بشه باید با متد post من دریافت کنم
ولی تو لاراول csrf-token میخواد. ولی سایتی که من میخوام بهش api بدم لاراولی نیست که csrf بشناسه
ساده بگم . من میخوام یه وب سرویس درست کنم که کاربر چندتا لینک و رشته api داشته باشه و باهاش بتونه اطلاعات بفرسته به من و از من اطلاعات بگیره
مثل زرین پال و سایت های سامانه پیامک و اینطور شرکت ها
تو سایت دیدم آموزش بوده ولی جامع هست من از لاراول فقط api رو بلد نیستم
اگه آموزشی هست هزینه هم میدم . فقط فوری نیاز دارم
برای استفاده از api دیگه csrf کار نمیده باید توکن کار کنی ، یک فیلد به تیبل user اضاف میکنی به نام api_token و موقع ثبت نام کاربر یک رشته راندوم و یونیک میسازی و بعد هروقت خواستی درخواست یا ثبتی انجام بدی api_token رو همراه درخواستت سمت وبسرویس لاراولی میدی خوده لاراول یک میدلور auth:api داره که توکن رو که براش فرستادی همون احراز هویت مثه وب رو انجام میده
این دوره رو باید بیبنید تا همه چیز دستتون بیاد
https://roocket.ir/series/build-a-api-with-laravel
واقعا ممنون از پاسختون. واقعا فکر نمیکردم انقدر زود جواب بدین . دمتون گرم .
@juza666
میشه بیشتر توضیح بدین؟ یعنی دستی api_token درست کنم بعد وقتی کلاینت میخواد درخواست بفرسته api_token رو هم مثل بقیه فیلد ها post کنه حله؟
'Route::post('/client/register','ApiController@clientRegister');'
public function clientRegister(Request $request){
$this->validate($request, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'phone' => 'required|string|max:11|unique:users',
'cod_meli' => 'required|string|max:10|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
$user = new User($request->all());
if ($user->save())
return response()->json(['result'=>['کاربر ثبت شد.']], 200);
return response()->json(['error'=>['خطا رخ داده است']], 300);
}'
'
@viva.mohammadiممنون . حتما میبینم آموزش رو ولی الان چون فوری هست یه راهنمایی کنید ممنون میشم
برید توی App\Http\Middleware\VerifyCsrfToken
بعد اون روت هایی که میخواین api باشه و csrf نداشته باشه رو اینجوری اضافه کنید:
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'api/article/*',
];
}
سلام
اره ولی طبق گفته دوستمون @ali.bayat شما تویی هدر توکن رو بفرس من بهمراه فیلدها میفرستادم تا الان هم مشکلی نداشتم
تویی این تایپیک
https://roocket.ir/discuss/2246
فقط برای روت هات باید میدلور auth:api ست کنی برای امنیت و احراز هویت
فیلد توکن هم موقع ثبت کاربر بصوت یک رشته راندوم و یونیک بساز
این یکی دوروز چقدر دوستان سوالات مشابه درباره api لاراول میپرسن 😋 ، بهتون پیشنهاد میکنم آموزش لاراول api راکت رو ببینید ادرس دوره رو هم دوست عزیز اقای @viva.mohammadi براتون قرار دادن
دوستان ممنون بابت کمک هاتون
من درست کردم . فقط یه مشکل . خروجی رو تو صفحه سایت من میاد من میخوام تو سایت کلاینت نشون بده
ببینید
یه فرم ساختم تو سایت دیگه اکشن فرم به api سایت خودم که لاراول هست
action="[http://localhost:8000/api/client/register](http://localhost:8000/api/client/register)"
اون تابعی که اجرا میشه
$vali = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'nullable|string|email|max:255|unique:users',
'phone' => 'required|string|max:11|unique:users',
'cod_meli' => 'nullable|string|max:10|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
if ($vali->fails()){
return response()->json([
'error'=>
$vali->errors()
,
'status'=>'error'
]);
}
حالا مشکل اینکه که مثلا json خطا یا حتی ثبت کاربر هر json تو صفحه http://localhost:8000/api/client/register نمایش میده
میخوام این json به فایل php برگرده تا بتونم اونجا data رو به سبک خودم نمایش بدم .
اینطور که یادم میاد درخواست های api باید به صورت curl_init باشه
نه اینکه اکشن فرم مستقیم بره به api
خب میشه بگین برای فرم مثلا بالا چه کدی curl_init بنویسم؟
خیلی فوری نیاز دارم
من کد زیر رو زدم ولی خطای message":"Unauthenticated." میده
''''
if(isset($_POST['submit'])){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://localhost:8000/api/client/register",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '
name='.$_POST['name'].'
email='.$_POST['email'].'
phone='.$_POST['phone'].'
cod_meli='.$_POST['col_meli'].'
password='.$_POST['password'].'
api_token='.$_POST['api_token']'
password_confirmation='.$_POST['password_confirmation'],
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache",
"Content-Type: application/x-www-form-urlencoded",
"api_token: RtryvbcYLj0ldyzoCZwQR3A5fULgLmEbDBjudL7QrtfFbnRMFlrRMqeFF9b9BLW5dePtS4EzoAZ2JF7mxqHIEicb4MngqV8dsD4JTB9aesXRGl"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
}
''''
تو رو خدا یکی راهنمایی کنه
هر طریقی api_token رو میفرستم میگه Unauthenticated
چطوری با curl میشه api token فرستاد؟
مشکل token رو حل کردم
یه مشکل دیگه اینکه مقادیر فرم با curl ارسال نیمشه
'''
CURLOPT_POSTFIELDS => '
name='.$_POST['name'].'
email='.$_POST['email'].'
phone='.$_POST['phone'].'
cod_meli='.$_POST['col_meli'].'
password='.$_POST['password'].'
'''
چیکار کنم؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟