سلام. من api برای لاراول نوشتم . برای احراز هویت هم
Route::middleware('auth:api')->group( function (){
Route::post('/tasks', [TaskController::class, 'add_task']);
});
با postman هم دارم تست میکنم.خب . الان دوتا مشکل هست
یکی اینکه توکن با متد post ارسال نیمشه (تو body میفرستم)
ولی اگه متد رو get کنم و پارامتری رو url بفرستم درست کار میکنه
مشکل بعدی اینکه میخوام کاربر یک بار لاگین کرد همیشه لاگین بمونه . مثل تلگرام، واتس اپ و ...
درضمن لاراول 8 کار میکنم
لطفا یه راهنمایی کنید. خیلی تو نت چرخیدم چیزی پیدا نشد. خیلی فورسه
@hesammousavi
برای این که همیشه لاگین بمونه باید توی لوکال استورج یا کوکی اطلاعات توکن رو ذخیره کنی و قبل از اجرا بررسی کنی ایا اطلاعاتی که ذخیره کردی هستند و در صورت نیاز درخواست سمت سرور بدی.
برای موبایل هم که دیتابیس و فایل و روش های زیادی هست.
الان من برای لاگین api این فانکشن رو نوشتم
public function login(Request $request){
//validate data
$validator = Validator::make($request->all(),
[
'username' => ['required'],
'password' => ['required']
]);
if($validator->fails()) {
return response([
'data' => $validator->errors(),
'status' => 'error'
], 422);
}
//check login user
if(!auth()->attempt(['username'=>\request('username'),'password'=>\request('password')],true)) {
return response([
'data' => [
'message' => 'اطلاعات صحیح نیست.'
],
'status' => 'error'
],403);
}
auth()->user()->update([
'api_token' => Str::random(100)
]);
return response([
'data' => [
'fullname' => auth()->user()->fullname,
'token' => auth()->user()->api_token,
],
'status' => 'success'
],200);
}
خب . remember که true دادم باید همیشه لاگین باشه دیگه؟
کاربر برای هر درخواست اون api_token رو باید بفرسته . چک میکنه اگه توکن موجود باشه درخواست بررسی میشه و گرنه خطا میده میگه دسترسی ندارین
الان یه مشکل دیگه هست اون توکن فقط با url بفرستم درست کار میکنه. یعنی اینطوری
https://domain.com/api/v1/tasks/?api_token=pqEH17ZCCgVJq...
ولی اگه درخواست متد post باشه دیگه توکن رو نمیشه پارامتری فرستاد باید تو body در request باشه
ولی توکن رو نمیخونه .
چیکار کنم؟
یعنی واقعا کسی با متد post تو api لاراول کار نکرده؟ یا سوال من خیلی ابتدایی کسی جواب نمیده؟
شما سوال رو بد میپرسی!
ارسال اطلاعات توی متد post با get فرق داره!
و در ضمن وقتی از api استفاده میکنی اون دگمه مرابخاطر بسپار کار نمیکنه برای شما چون کوکی برای شما ست نمیشه، اینکار به عهده فرانت شما هستش که خودتون بعد از بررسی اون دگمه / چک باکس اطلاعات رو توی مرورگر برای کاربر ذخیره کنی.
بیشتر مطالعه کنبد
https://7learn.com/programming/get-vs-post
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟