Решено - Laravel 6 логин ничего не делает на сервере (Heroku) - PullRequest
0 голосов
/ 13 апреля 2020

Я новичок в Laravel. Я использую Laravel 6 для разработки медицинского приложения. Все хорошо работает на местном. Теперь я попытался протестировать свое приложение на сервере (Heroku). Экран входа в систему загружается хорошо, но когда я вставляю имя пользователя и пароль, приложение перезагружает страницу входа, и ничего не происходит.

Моя база данных хранится на db4free. net и, если я go на URL : myapp.herokuapp.com/register и я регистрирую нового пользователя, новый пользователь добавляется в базу данных, поэтому я думаю, что это не проблема подключения к базе данных. Я собираюсь добавить код, если он поможет вам понять, что происходит:

web. php:

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('auth.login');
});

Auth::routes();

Route::get('profile', 'ProfileController@index')->name('profile');
Route::put('profile-update', 'ProfileController@update')->name('profile.update');
Route::put('profile-update-password', 'ProfileController@updatePassword')->name('profile.update.password');


Route::group(['as'=>'admin.','prefix'=>'admin','namespace'=>'admin', 'middleware'=>['auth','admin']], function ()
{
    Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    Route::resource('user', 'UserController');
    Route::resource('dosimeter', 'DosimeterController');
    Route::resource('dosimeterref', 'DosimeterRefController');
    Route::resource('room', 'RoomController');

    Route::put('password-update/{id}', 'UserController@updatePassword')->name('password.update');
    Route::put('password-reset/{id}', 'UserController@resetPassword')->name('password.reset');
});

Route::group(['as'=>'mphysicist.','prefix'=>'mphysicist','namespace'=>'mphysicist', 'middleware'=>['auth','mphysicist']], function ()
{
    Route::get('dashboard', 'DashboardController@index')->name('dashboard');
});

Route::group(['as'=>'professional.','prefix'=>'professional','namespace'=>'professional', 'middleware'=>['auth','professional']], function ()
{
    Route::get('dashboard', 'DashboardController@index')->name('dashboard');
});

LoginController. php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;

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 = '/';
    protected $redirectTo;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        if(Auth::check() && Auth::user()->role->id == 1)
        {
        $this->redirectTo = route('admin.dashboard');
        }
        elseif (Auth::check() && Auth::user()->role->id == 2)
        {
            $this->redirectTo = route('mphysicist.dashboard');
        }
        else
        {
            $this->redirectTo = route('professional.dashboard');
        }

        $this->middleware('guest')->except('logout');
    }

    public function dni(){
        return 'dni';
    }
}

AdminMiddleware. php

<?php

namespace App\Http\Middleware;

use Closure;

use Illuminate\Support\Facades\Auth;

class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::check() && Auth::user()->role->id == 1)
        {
            return $next($request);
        }
        else
        {
            return redirect()->route('login');
        }
    }
}

1 Ответ

0 голосов
/ 14 апреля 2020

Я нашел проблему. Я изменил свой логин, чтобы использовать DNI (национальный идентификатор документа) вместо электронной почты, но я забыл переопределить метод входа в контроллере входа. Я не понимаю, почему это работало на локальном компьютере без этого переопределения.

Поскольку, если кто-то помогает, это мой метод входа переопределения:

public function login(Request $request)
    {   

        $this->validate($request, [
            'dni' => 'required',
            'password' => 'required',
        ]);

        if(Auth::attempt(['dni' => $request->dni, 'password' => $request->password]))
        {
            if(Auth::check() && Auth::user()->role->id == 1)
            {
                return redirect()->route('admin.dashboard');
            }
            elseif (Auth::check() && Auth::user()->role->id == 2)
            {
                return redirect()->route('mphysicist.dashboard');
            }
            else
            {
                return redirect()->route('professional.dashboard');
            }
        }else{
            return redirect()->route('login')
            ->with('error','DNI and Password are wrong.');
        }

    }
...