hossein
5 سال پیش توسط hossein مطرح شد
12 پاسخ

Api در لاراول

من سایتم با لاراول ۵.۷ نوشتم . لاراول بلدم فقط api و وب سرویس رو نمیتونم چطوری پیاده سازی کنم
مثلا تو روت api مسیر مشخص میکنم که مثلا کار آدرس
www.domain.ir/api/user
رو زد لیست کاربران رو به صورت json بهش برگردونه
خب ولی وقتی جایی لازمه از کاربر اطلاعات ارسال بشه باید با متد post من دریافت کنم
ولی تو لاراول csrf-token میخواد. ولی سایتی که من میخوام بهش api بدم لاراولی نیست که csrf بشناسه

ساده بگم . من میخوام یه وب سرویس درست کنم که کاربر چندتا لینک و رشته api داشته باشه و باهاش بتونه اطلاعات بفرسته به من و از من اطلاعات بگیره

مثل زرین پال و سایت های سامانه پیامک و اینطور شرکت ها

تو سایت دیدم آموزش بوده ولی جامع هست من از لاراول فقط api رو بلد نیستم
اگه آموزشی هست هزینه هم میدم . فقط فوری نیاز دارم


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش آپدیت شد
0

برای استفاده از api دیگه csrf کار نمیده باید توکن کار کنی ، یک فیلد به تیبل user اضاف میکنی به نام api_token و موقع ثبت نام کاربر یک رشته راندوم و یونیک میسازی و بعد هروقت خواستی درخواست یا ثبتی انجام بدی api_token رو همراه درخواستت سمت وبسرویس لاراولی میدی خوده لاراول یک میدلور auth:api داره که توکن رو که براش فرستادی همون احراز هویت مثه وب رو انجام میده


vahid Mohammadi
@viva.mohammadi 5 سال پیش مطرح شد
1

@emperatur133

این دوره رو باید بیبنید تا همه چیز دستتون بیاد

https://roocket.ir/series/build-a-api-with-laravel

hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

واقعا ممنون از پاسختون. واقعا فکر نمیکردم انقدر زود جواب بدین . دمتون گرم .
@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);
}'

'


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

@viva.mohammadiممنون . حتما میبینم آموزش رو ولی الان چون فوری هست یه راهنمایی کنید ممنون میشم


developer
تخصص : برنامه نویس
@developer 5 سال پیش مطرح شد
0

برید توی 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/*',
  ];
}

سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش آپدیت شد
1

سلام

اره ولی طبق گفته دوستمون @ali.bayat شما تویی هدر توکن رو بفرس من بهمراه فیلدها میفرستادم تا الان هم مشکلی نداشتم

تویی این تایپیک
https://roocket.ir/discuss/2246

فقط برای روت هات باید میدلور auth:api ست کنی برای امنیت و احراز هویت

فیلد توکن هم موقع ثبت کاربر بصوت یک رشته راندوم و یونیک بساز

این یکی دوروز چقدر دوستان سوالات مشابه درباره api لاراول میپرسن 😋 ، بهتون پیشنهاد میکنم آموزش لاراول api راکت رو ببینید ادرس دوره رو هم دوست عزیز اقای @viva.mohammadi براتون قرار دادن


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش آپدیت شد
0

دوستان ممنون بابت کمک هاتون
من درست کردم . فقط یه مشکل . خروجی رو تو صفحه سایت من میاد من میخوام تو سایت کلاینت نشون بده
ببینید
یه فرم ساختم تو سایت دیگه اکشن فرم به 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 رو به سبک خودم نمایش بدم .


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

@juza666
اگه میشه راهنمایی کنید


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

اینطور که یادم میاد درخواست های api باید به صورت curl_init باشه
نه اینکه اکشن فرم مستقیم بره به api

خب میشه بگین برای فرم مثلا بالا چه کدی curl_init بنویسم؟


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش آپدیت شد
0

خیلی فوری نیاز دارم
من کد زیر رو زدم ولی خطای 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;
    }

}

''''


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

تو رو خدا یکی راهنمایی کنه
هر طریقی api_token رو میفرستم میگه Unauthenticated
چطوری با curl میشه api token فرستاد؟


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

مشکل token رو حل کردم
یه مشکل دیگه اینکه مقادیر فرم با curl ارسال نیمشه
'''
CURLOPT_POSTFIELDS => '
name='.$_POST['name'].'
email='.$_POST['email'].'
phone='.$_POST['phone'].'
cod_meli='.$_POST['col_meli'].'
password='.$_POST['password'].'
'''

چیکار کنم؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام