Laravel:如何根据用户ID为每个用户提供不同的目标网页

时间:2019-11-21 10:40:23

标签: php laravel

我正在使用基本的laravel 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');
    }
}

添加用户控制

<?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 个答案:

答案 0 :(得分:1)

您可以在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')
    }
    ...
}

答案 1 :(得分:1)

您应该按照以下步骤操作:

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