راکت
حل شده

دریافت url در کنترلر بعد از ریدایرکت شدن از api instagram

8 پاسخ

سلام.
من میخوام مقدار کوئری که بعد از ریدایرکت شدن از اینستا گرام دریافت میکنم رو داخل کنترلر مربوطه بهش درسترسی داشته باشم. (بودن استفاده از کوکی و سیشن و دیتابیس).
این کدی که تو url میاد رو میخوام

اینو داخل route ها با request()->getQueryString(); میتونم به دستش بیارم ولی تو کنترلر میخوامش پیشنهادی دارید؟

در کل من این کار رو برای استفاده احراز حویت دارم انجام میدم چون نتونستم از پکیج Socialite برای graph api instagram استفاده کنم.

اگر پکیجی یا مقاله ای که مرحله به مرحله احراز هویت از طریق api جدید اینستاگرام رو توضیح بده سراغ دارید لطفا به اشتراک بذارید.

بعنوان اولین گفتگو چقدر سوال پرسیم.😅

ثبت پرسش جدید

پاسخ‌ها

8
محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

بهترین پاسخ

@hossein0440
سلام.
توی کنترلر هم می تونید از ;()request()->getQueryString استفاده کنید!

مقاله زیر هم بررسی کنید بد نیست.
https://stackoverflow.com/questions/59142407/laravel-integrate-with-instagram-api-after-october-2019

حسین اخلاقی
حسین اخلاقی
@hossein0440

تخصص: مدیر وب سایت ، نیمه حرفه ای در ورد پرس

@mohsenbostan میدونم باید بشه ولی نمیشه؟

برای مثال من دقیقا از همین مقاله ای که گفتید استفاده کردم و مطابق اون پیش رفتم اما باز هم به ارور 404 میرسم.

روت ها و بقیه موارد مثل کنترلر هم تصویرشو میتونید ببینید.
تصویر کنترلر

من با توجه به این کد انتظار دارم حداقل اطلاعات رو نشونم بده. ولی با این تصویر روبرو میشم.
توی ادرس بار میبینید که کد رو بر گردونده
ولی داخل ریکوئست نمیتونه بگیرتش.
من از شما @hesammousavi دعوت میکنم اگه میتونید به من کمک کنید.

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

کلاس Request رو درست ایمپورت کردید؟
از هلپر Request هم استفاده میکنی،فرقی نداره؟

شاید پاسخ شما همین‌جا باشد

حسین اخلاقی
حسین اخلاقی
@hossein0440

تخصص: مدیر وب سایت ، نیمه حرفه ای در ورد پرس

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

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Request;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */
    use AuthenticatesUsers;
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
//    public function redirectToProvider($driver)
//    {
//        // return Socialite::driver($driver)->redirect();
//        // return SocialiteAlias::driver($driver)->redirect();
//
//        return redirect('https://www.instagram.com/oauth/authorize?client_id=210807913702831&redirect_uri=https://login.nban.ir/instagram/callback&scope=user_profile,user_media&response_type=code');
//    }
//
//    public function handleProviderCallback(Request $request)
//    {
//
//        dd($url = $request->url());
//
//    }
   // use GuzzleHttp\Client;
    public function redirectToInstagramProvider()
    {
        $appId = config('services.instagram.client_id');
        $redirectUri = urlencode(config('services.instagram.redirect'));
        return redirect()->to("https://api.instagram.com/oauth/authorize?app_id={$appId}&redirect_uri={$redirectUri}&scope=user_profile,user_media&response_type=code");
    }
    public function instagramProviderCallback(Request $request)
    {
       dd( $code = $request->code);
        if (empty($code)) return redirect()->route('home')->with('error', 'Failed to login with Instagram.');

        $appId = config('services.instagram.client_id');
        $secret = config('services.instagram.client_secret');
        $redirectUri = config('services.instagram.redirect');

        $client = new Client();

        // Get access token
        $response = $client->request('POST', 'https://api.instagram.com/oauth/access_token', [
            'form_params' => [
                'app_id' => $appId,
                'app_secret' => $secret,
                'grant_type' => 'authorization_code',
                'redirect_uri' => $redirectUri,
                'code' => $code,
            ]
        ]);

        if ($response->getStatusCode() != 200) {
            return redirect()->route('home')->with('error', 'Unauthorized login to Instagram.');
        }

        $content = $response->getBody()->getContents();
        $content = json_decode($content);

        $accessToken = $content->access_token;
        $userId = $content->user_id;

        // Get user info
        $response = $client->request('GET', "https://graph.instagram.com/me?fields=id,username,account_type&access_token={$accessToken}");

        $content = $response->getBody()->getContents();
        $oAuth = json_decode($content);
dd($oAuth);
        // Get instagram user name
        $username = $oAuth->username;

        // do your code here
    }
}
محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@hossein0440
خب شما کلاس Request رو اشتباه ایمپورت کردید. به جای :

use Illuminate\Support\Facades\Request;

از این استفاده کنید :

use Illuminate\Http\Request;
حسین اخلاقی
حسین اخلاقی
@hossein0440

تخصص: مدیر وب سایت ، نیمه حرفه ای در ورد پرس

@mohsenbostan @ali.bayat از هردو نفر ممنونم. درست شد. من route رو کپی کرده بودم و redirect callback هم رو باید تصحیح میکردم.😔 عذر خواهم وقتتون رو گرفتم.
البته اون لینکی که دادید خیلی خوب بود.
اما الان یک سوال دیگه برام پیش اومد؟ تفاوت این کلاس ها با هم چیه که هردو نفر شک داشتید اشتباه ایمپورت کردم؟ من چطوری باید تشخیص بدم از کدوم کلاس باید استفاده کنم؟

تشکر مجدد!

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

@hossein0440
خواهش میکنم.
در مورد کلاس ها هم باید بگم که هر کدوم کاری رو انجام میدن.
باید از طریق داکیومنت سایت بفهمید که کدوم رو باید استفاده کنید.

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

Illuminate\Http\Request کلاس ریکوئست لاراول هست و
Illuminate\Support\Facades\Request ریکوئست فساد هست..

کلاس ریکوئست که مشخصه حاوی کدهای لازم برای عملیات های مربوط به ریکوئست هست
و فساد هم Instance همین کلاس رو بر میگردونه ..

عملکردهاشون یکسانه اما با یه تغییر جزئی در api که دارند
در کنار اینها هلپر ها هم هستند
و اینها راههای مختلف انجام یک کار در لاراول هست

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

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