سلام.
من میخوام مقدار کوئری که بعد از ریدایرکت شدن از اینستا گرام دریافت میکنم رو داخل کنترلر مربوطه بهش درسترسی داشته باشم. (بودن استفاده از کوکی و سیشن و دیتابیس).
اینو داخل route ها با request()->getQueryString(); میتونم به دستش بیارم ولی تو کنترلر میخوامش پیشنهادی دارید؟
در کل من این کار رو برای استفاده احراز حویت دارم انجام میدم چون نتونستم از پکیج Socialite برای graph api instagram استفاده کنم.
اگر پکیجی یا مقاله ای که مرحله به مرحله احراز هویت از طریق api جدید اینستاگرام رو توضیح بده سراغ دارید لطفا به اشتراک بذارید.
بعنوان اولین گفتگو چقدر سوال پرسیم.😅
@hossein0440
سلام.
توی کنترلر هم می تونید از ;()request()->getQueryString
استفاده کنید!
مقاله زیر هم بررسی کنید بد نیست.
https://stackoverflow.com/questions/59142407/laravel-integrate-with-instagram-api-after-october-2019
@mohsenbostan میدونم باید بشه ولی نمیشه؟
برای مثال من دقیقا از همین مقاله ای که گفتید استفاده کردم و مطابق اون پیش رفتم اما باز هم به ارور 404 میرسم.
روت ها و بقیه موارد مثل کنترلر هم تصویرشو میتونید ببینید.
من با توجه به این کد انتظار دارم حداقل اطلاعات رو نشونم بده. ولی با این تصویر روبرو میشم.
ولی داخل ریکوئست نمیتونه بگیرتش.
من از شما @hesammousavi دعوت میکنم اگه میتونید به من کمک کنید.
@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
}
}
@hossein0440
خب شما کلاس Request رو اشتباه ایمپورت کردید. به جای :
use Illuminate\Support\Facades\Request;
از این استفاده کنید :
use Illuminate\Http\Request;
@mohsenbostan @ali.bayat از هردو نفر ممنونم. درست شد. من route رو کپی کرده بودم و redirect callback هم رو باید تصحیح میکردم.😔 عذر خواهم وقتتون رو گرفتم.
البته اون لینکی که دادید خیلی خوب بود.
اما الان یک سوال دیگه برام پیش اومد؟ تفاوت این کلاس ها با هم چیه که هردو نفر شک داشتید اشتباه ایمپورت کردم؟ من چطوری باید تشخیص بدم از کدوم کلاس باید استفاده کنم؟
تشکر مجدد!
@hossein0440
خواهش میکنم.
در مورد کلاس ها هم باید بگم که هر کدوم کاری رو انجام میدن.
باید از طریق داکیومنت سایت بفهمید که کدوم رو باید استفاده کنید.
Illuminate\Http\Request کلاس ریکوئست لاراول هست و
Illuminate\Support\Facades\Request ریکوئست فساد هست..
کلاس ریکوئست که مشخصه حاوی کدهای لازم برای عملیات های مربوط به ریکوئست هست
و فساد هم Instance همین کلاس رو بر میگردونه ..
عملکردهاشون یکسانه اما با یه تغییر جزئی در api که دارند
در کنار اینها هلپر ها هم هستند
و اینها راههای مختلف انجام یک کار در لاراول هست
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟