Laravel: Как дать каждому пользователю разные целевые страницы в зависимости от их идентификатора - PullRequest
0 голосов
/ 21 ноября 2019

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

добавить блейд-пользователь

@extends('layouts.app')

@section('content')
    <div class="container" style="width:60%">
        <div class="card">
            <div class="card-header">Add New User</div>
            <div class="card-body">
                {!! Form::open(['action'=>'UserAccountsController@store', 'method'=>'POST']) !!}
                    @csrf
                    <div class="form-group row justify-content-center">
                        {{Form::label('acctyp', 'Account Type',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::select('acctyp',['Adm'=>'Admin','Rcd'=>'Records','Hod'=>'H.O.D','Tch'=>'Teacher','Std'=>'Student'],null,['placeholder'=>'Choose Account...','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('name', 'Name',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::text('name','',['placeholder'=>'Name','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('surname', 'Surname',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::text('surname','',['placeholder'=>'Surname','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('gender', 'Gender',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::select('gender',['F'=>'Female','M'=>'Male','O'=>'Other'],null,['placeholder'=>'Choose Gender...','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('dob', 'Date of Birth',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::date('dob','',['class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('email', 'E-mail Address',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::email('email','',['placeholder'=>'E-mail Address','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('userid', 'User I.D',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::text('userid','',['placeholder'=>'User I.D','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('password', 'Password',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::password('password',['placeholder'=>'Password','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                        {{Form::label('cpassword', 'Confirm Password',['class'=>'col-md-2'])}}
                        <div class="col-md-4">
                            {{Form::password('cpassword',['placeholder'=>'Confirm Password','class'=>'form-control'])}}
                        </div>
                    </div>
                    <div class="form-group row justify-content-center">
                       {{Form::submit('Add User',['class'=>'btn btn-success'])}}
                    </div>
                {!! Form::close() !!}
            </div>
        </div>
    </div>
    <script type="text/javascript">
        $(document).ready( function() {
            $('#userid').on('change', function() {
                $('#password').val($(this).val());
                $('#cpassword').val($(this).val());
            });
        });
    </script>
@endsection

контроллер входа

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

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 = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

добавитьпользователь conrtoller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class UserAccountsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $accounts = User::all();
        return view('users.index')->with('accounts', $accounts);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('users.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
            'acctyp'=>'required',
            'name'=>'required',
            'surname'=>'required',
            'gender'=>'required',
            'dob'=>'required',
            'email'=>'required',
            'userid'=>'required',
            'password'=>'required',
        ]);

        $account = new User;
        $account->acctyp = $request->input('acctyp');
        $account->name = $request->input('name');
        $account->surname = $request->input('surname');
        $account->gender = $request->input('gender');
        $account->dob = $request->input('dob');
        $account->email = $request->input('email');
        $account->userid = $request->input('userid');
        $account->password = bcrypt($request->input('password'));
        $account->save();

        return redirect('/users')->with('success', 'New user successfully added!');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $account = User::find($id);
        return view('users.show')->with('account', $account);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $account = User::find($id);
        return view('users.edit')->with('account', $account);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'acctyp'=>'required',
            'name'=>'required',
            'surname'=>'required',
            'gender'=>'required',
            'dob'=>'required',
            'email'=>'required',
            'userid'=>'required',
            'password'=>'required',
        ]);

        $account = User::find($id);
        $account->acctyp = $request->input('acctyp');
        $account->name = $request->input('name');
        $account->surname = $request->input('surname');
        $account->gender = $request->input('gender');
        $account->dob = $request->input('dob');
        $account->email = $request->input('email');
        $account->userid = $request->input('userid');
        $account->password = bcrypt($request->input('password'));
        $account->save();

        return redirect('/users')->with('success', 'User successfully updated!');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $account = User::find($id);
        $account->delete();

        return redirect('/users')->with('success', 'User successfully removed!');
    }
}

Ответы [ 2 ]

1 голос
/ 21 ноября 2019

Для этого необходимо выполнить следующие шаги:

In LoginController.php

Переопределить этот метод protected $redirectTo = '/home'; Поэтому вам нужно удалить приведенный выше код и добавить следующий код:

public function redirectTo(){


    $type = Auth::user()->acctyp; 


    switch ($type) {
        case 'type1':
            return '/YOUR PATH';
            break;
        case 'type2':
            return '/YOUR PATH';
            break; 
        default:
            return '/YOUR PATH'; 
            break;
    }
}

Не забудьте включить класс Illuminate\Support\Facades\Auth; в LoginController.php

1 голос
/ 21 ноября 2019

Вы можете определить метод redirectTo на вашем LoginController и вернуть путь, на который вы хотите, чтобы они были перенаправлены:

protected function redirectTo()
{
    // do your logic to decide where to go and return a path

    $user = $this->guard()->user();

    if ($user->acctyp == 'something') {
        return route('something.dashboard');
    }
    ...
}

При использовании метода redirectTo установка по умолчанию попытается перенаправитьих на «предполагаемый» URL и возврат к тому, что вы возвращаете с redirectTo. (Предполагалось, что они будут пытаться связаться до того, как связующее ПО auth перенаправит их на страницу входа в систему)

Если вы хотите получить полный контроль над ответом, вы можете переопределить метод authenticated в LoginController,которая исходит из черты AuthenticatesUsers, чтобы вернуть желаемый ответ:

protected function authenticated(Request $request, $user)
{
    // do your logic here and return a redirect
    // to where you want them to go to

    if ($user->acctyp == 'something') {
        return redirect()->route('something.dashboard')
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...