Api در لاراول

3 سال پیش توسط hossein Emperatur مطرح شد
آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

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

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

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

آفلاین
user-avatar
سیدعلی موسوی ( 142798 تجربه )
3 سال پیش
تخصص : سی شارپ و پی اچ پی

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
vahid Mohammadi ( 37202 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

1

@emperatur133

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

https://roocket.ir/series/build-a-api-with-laravel
آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

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);
}'

'

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
developer ( 37592 تجربه )
3 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

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/*',
  ];
}
آفلاین
user-avatar
سیدعلی موسوی ( 142798 تجربه )
3 سال پیش
تخصص : سی شارپ و پی اچ پی

لینک کوتاه اشتراک گذاری

1

سلام

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

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

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

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

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

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

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 رو به سبک خودم نمایش بدم .

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

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

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

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;
    }

}

''''

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
hossein Emperatur ( 2890 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

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

چیکار کنم؟

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.