laravel 6 авторизоваться успешно, но перенаправить на страницу авторизации - PullRequest
0 голосов
/ 17 апреля 2020

enter image description here

Моя среда - это сервер MAMP на MACOS.

LoginController. php

public function authenticate(Request $request)
    {
        $this->validate($request, [
            'email'   => 'required|email',
            'password' => 'required|min:8'
        ]);

        if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password,'isactive'=>true], $request->get('remember'))) {

            try{
                $isAdmin = auth()->user()->isAdmin;

                $data = Permission::select('route','retailer_access','distributor_access')
                ->where('method','GET')
                ->get();
                $urlData = [];
                foreach($data as $url){
                    $myurl['route'] = $url['route'];
                    switch($isAdmin){
                        case 0:
                            $myurl['access'] = $url['retailer_access'];
                            break;
                        case 1:
                            $myurl['access'] = $url['distributor_access'];
                            break;
                        case 2:
                            $myurl['access'] = true;
                            break;
                    }
                    array_push($urlData,$myurl);
                }
                $is_admin = false;
                if($isAdmin == 2){
                    $is_admin=true;
                }

                $arr = ['urlData'=>$urlData,'is_admin'=>$is_admin];
                session($arr);
                return redirect()->intended('/home');
            }
            catch(Exception $e){
                return back()->with('failed','Invalid email or password.')
                    ->withInput($request->only('email'));
            }

        }
        return back()->with('failed','Invalid email or password.')
                    ->withInput($request->only('email'));
    }

HomeController. php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('permission');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
}

Массив ниже, который я установил в сеансе.

Array (
    [0] => Array ( [route] => setting/servicetype/add [access] => 1 )
    [1] => Array ( [route] => setting/servicetype [access] => 1 ) 
    [2] => Array ( [route] => setting/api/edit/{id} [access] => 1 )
    [3] => Array ( [route] => setting/api/add [access] => 1 )
    [4] => Array ( [route] => setting/api [access] => 1 )
    [5] => Array ( [route] => setting/carrier [access] => 1 )
    [6] => Array ( [route] => wallet/details/{id?} [access] => 1 )
    [7] => Array ( [route] => wallet [access] => 1 )
    [8] => Array ( [route] => permission [access] => 1 )
    [9] => Array ( [route] => home [access] => 1 )
    [10] => Array ( [route] => user/edit/{id} [access] => 1 )
    [11] => Array ( [route] => user/add [access] => 1 )
    [12] => Array ( [route] => user [access] => 1 )
    [13] => Array ( [route] => about [access] => 1 )
    [14] => Array ( [route] => logout [access] => 1 )
    [15] => Array ( [route] => password/confirm [access] => 1 )
    [16] => Array ( [route] => password/reset/{token} [access] => 1 )
    [17] => Array ( [route] => password/reset [access] => 1 )
    [18] => Array ( [route] => register [access] => 1 )
    [19] => Array ( [route] => login [access] => 1 )
    [20] => Array ( [route] => / [access] => 1 )
    [21] => Array ( [route] => api/user [access] => 1 )
    [22] => Array ( [route] => _ignition/styles/{style} [access] => 1 )
    [23] => Array ( [route] => _ignition/scripts/{script} [access] => 1 )
    [24] => Array ( [route] => _ignition/health-check [access] => 1 )
    [25] => Array ( [route] => settings/edit/{id} [access] => 1 )
)

Есть ли какие-либо ограничения элементов сеанса в моей среде? Когда элемент сеанса меньше 25, он работает, но когда я добавляю еще одно значение ключа, эта проблема возникает. Пожалуйста, помогите мне понять, в чем здесь проблема.

1 Ответ

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

Нашел решение этой проблемы. Я использую драйвер сеанса cook ie, поэтому я преобразовал массив $ arr (в LoginController. php) в строку json_ecoded.

$arrstr = json_encode($arr);

и использую метод pu sh () для ввода в сеанс.

$request->session->push('permission',$arrstr);

Используйте метод json_decode для возврата urlData и is_admin в app.blade. php подобно

<?php 
    $permission = session('permission');
    $perArray = json_decode($permission[0],true);
    $urlData = $perArray['urlData']; $is_admin = $perArray['is_admin']; 
?> 
...