حسین اخلاقی
4 سال پیش توسط حسین اخلاقی مطرح شد
8 پاسخ

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

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

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

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

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

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


ثبت پرسش جدید
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

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

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


حسین اخلاقی
تخصص : مدیر وب سایت ، نیمه حرفه ای در...
@hossein0440 4 سال پیش مطرح شد
0

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

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

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

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

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


حسین اخلاقی
تخصص : مدیر وب سایت ، نیمه حرفه ای در...
@hossein0440 4 سال پیش مطرح شد
0

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

محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

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

use Illuminate\Support\Facades\Request;

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

use Illuminate\Http\Request;

حسین اخلاقی
تخصص : مدیر وب سایت ، نیمه حرفه ای در...
@hossein0440 4 سال پیش مطرح شد
0

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

تشکر مجدد!


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

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

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

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


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

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