Reputation: 106
I'm working on simple laravel9 project on my localhost where you can login via Facebook or Twitter.
I added custom domain to my localhost with verified ssl.
composer require laravel/socialite
already installed.
Facebook login works fine but twitter shows Erorr:
League\OAuth1\Client\Credentials\CredentialsException Received HTTP status code [401] with message "{"errors":[{"code":32,"message":"Could not authenticate you."}]}" when getting temporary credentials.
Here is my TwitterController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Exception;
class TwitterController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function redirectToTwitter()
{
return Socialite::driver('twitter')->redirect();
}
/**
* Create a new controller instance.
*
* @return void
*/
public function handleTwitterCallback()
{
try {
$user = Socialite::driver('twitter')->user();
$finduser = User::where('twitter_id', $user->id)->first();
if($finduser){
Auth::login($finduser);
return redirect()->intended('/home');
}else{
$newUser = User::updateOrCreate(['email' => $user->email],[
'name' => $user->name,
'twitter_id'=> $user->id,
'username'=> $user->id,
'uid' => rand(9,999999999)+time(),
'password' => encrypt('123456dummy')
]);
Auth::login($newUser);
return redirect()->intended('/home');
}
} catch (Exception $e) {
dd($e->getMessage());
}
}
}
config/services.php
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => 'https://testsite.com/auth/twitter/callback',
],
login.blade.php
{{-- Login with Twitter --}}
<div class="mt-4 p-3 d-flex justify-content-center">
<a class="btn mr-1" href="{{ route('auth.twitter') }}"
style="background: #1D9BF9; color: #ffffff; padding: 10px; width: 30%; text-align: center; border-radius:3px;">
Twitter
</a>
</div>
routes/web.php
Route::controller(TwitterController::class)->group(function(){
Route::get('auth/twitter', 'redirectToTwitter')->name('auth.twitter');
Route::get('auth/twitter/callback', 'handleTwitterCallback');
});
.env
TWITTER_CLIENT_ID=xxxxxxxxxxxxxxxx
TWITTER_CLIENT_SECRET=xxxxxxxxxxxxxxx
composer.json
"require": {
"php": "^7.3|^8.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.75",
"laravel/sanctum": "^2.11",
"laravel/socialite": "^5.5",
"laravel/tinker": "^2.5",
"laravel/ui": "^3.4",
"socialiteproviders/twitter": "^4.1"
},
I know that my thread is duplicated but I searched alot and found that there are many people didn't find a clean solution yet.
I also tried this:
composer require socialiteproviders/twitter
as provided by laravel docs for other login providers using this https://socialiteproviders.com/Twitter/#installation-basic-usage
tried also to add providers to config/app which are not needed as I know
'providers' => [ Laravel\Socialite\SocialiteServiceProvider::class,],
'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class,],
here is my twitter application screenshot:
Environment:staging
Upvotes: 1
Views: 1348
Reputation: 106
Solved !
App keys where somehow broken so I regenerate them. and the other issue was misspilling in call back URL on Twitter app
Upvotes: 1