Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Prabodhana's avatar

Laravel Auth guard not working on some shared hostings

I made a project with laravel multiple auth guard with sanctum it perfectly work on localhost but after upload to shared hosting it not authenticate the user. login process work fine and return token as well after trying to get user details it says it not authenticated. After I tried uploaded it different shared hosting and it works. But not in first hosting is there any ideas for why is that happen?

config/auth.php

<?php

return [

/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session"
|
*/

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'memberGuard' => [
        'driver' => 'sanctum',
        'provider' => 'memberP',
    ],
    'adminGuard' => [
        'driver' => 'sanctum',
        'provider' => 'adminP',
    ]

],

/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'adminP' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'memberP' => [
        'driver' => 'eloquent',
        'model' => App\Models\Member::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that each reset token will be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
    'adminGuard' => [
        'provider' => 'adminP',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
    'memberGuard' => [
        'provider' => 'memberP',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
],

/*
|--------------------------------------------------------------------------
| Password Confirmation Timeout
|--------------------------------------------------------------------------
|
| Here you may define the amount of seconds before a password confirmation
| times out and the user is prompted to re-enter their password via the
| confirmation screen. By default, the timeout lasts for three hours.
|
*/

'password_timeout' => 10800,

 ];

Auth/MemberController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\Member;
use App\Models\User;
use App\Traits\ApiResponser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;

class MemberController extends Controller
{
use ApiResponser;
/**
 * Create a new AuthController instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('auth:memberGuard', ['except' => ['login']]);
}

/**
 * Authenticate user and create token.
 *
 * @return token
 */
public function login(Request $request)
{
    Log::info('This is some useful information.');
    $fields = $request->validate([
        'accppa_member_id' => 'required',
        'password'  => 'required|string',
    ]);

    // Check user name
    $user = Member::where('accppa_member_id', $fields['accppa_member_id'])->first();

    // Check password
    if (!$user || !Hash::check($fields['password'], $user->password)) {
        return $this->error('Invalid Credentials', 401);
    }

    

    // Remove Existing tokens
    if ($user->tokens()->count() > 0) {
        $user->tokens()->delete();
    }

    $token = $user->createToken(uniqid());

    return $this->success([
        'token' => $token->plainTextToken
    ]);
}

/**
 * User
 *
 * @return void
 */
public function user()
{
    $user =  auth()->guard('memberGuard')->user();
    return response()->json($user);
}

 /**
 * Remove user token
 *
 * @return void
 */
public function logout(Request $request)
{
    
    $request->user()->currentAccessToken()->delete();

    return response()->json(['message' => 'Successfully logged out']);
}
}
0 likes
1 reply
LaryAI's avatar
Level 58

One possible reason for the issue could be that the hosting provider is not supporting the required PHP extensions or versions. Check the PHP version and extensions required by Laravel and make sure they are installed on the server.

Another possible reason could be that the session driver is not set correctly. Check the session driver in the .env file and make sure it is set to the correct value. For example, if using the file driver, make sure the session files are being stored in a writable directory.

Also, check the file permissions of the storage and bootstrap/cache directories. Make sure they are writable by the web server user.

If none of the above solutions work, try clearing the cache and config files by running the following commands:

php artisan cache:clear
php artisan config:clear

If the issue still persists, try enabling debug mode and check the error logs for any clues.

// In the .env file
APP_DEBUG=true

// In the config/app.php file
'debug' => env('APP_DEBUG', false),

If the error logs are not helpful, try contacting the hosting provider's support team for assistance.

Please or to participate in this conversation.