首页 > 解决方案 > 从谷歌社交名流获得回调后,如何从正文中的 laravel 控制器而不是 url 发送视图中的数据?

问题描述

Login Controller :
<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Support\Facades\Redirect;


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

use Laravel\Socialite\Facades\Socialite;
use App\Models\User;

class LoginController extends Controller
{
   

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    //protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */

    public function redirectToProvider()
    {
        return Socialite::driver('google')->redirect();
    }

    /**
     * Obtain the user information from GitHub.
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('google')->stateless()->user();

        $user_status = User::whereEmail($user->getEmail())->first();

        if ($user_status) {
            auth()->login($user_status, true);

            return Redirect::route('home', ['role' => $user_status->Role]);
        } else {
            return redirect('login');
        }
    }
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

In home.blade.php :
@extends('layouts.admin')

@section('content')
<!-- Content Header (Page header) -->
<div class="content-header">
    <div class="container-fluid">
        <div class="row mb-2">
            <div class="col-sm-6">
                <h1 class="m-0 text-dark">Dashboard</h1>
            </div><!-- /.col -->
            <div class="col-sm-6">
                <ol class="breadcrumb float-sm-right">
                    <li class="breadcrumb-item"><a href="{{route('home')}}">Home</a></li>

                </ol>
            </div><!-- /.col -->
        </div><!-- /.row -->
    </div><!-- /.container-fluid -->
</div>
<!-- /.content-header -->

<!-- Main content -->
<section class="content">
    <div class="container-fluid">
        <!-- Small boxes (Stat box) -->

        <!-- /.row -->
        <!-- Main row -->
        {{$role}}
        <!-- /.row (main row) -->
    </div><!-- /.container-fluid -->
</section>
<!-- /.content -->
@endsection

web.php :

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home/{role?}', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::get('login/google', [LoginController::class, 'redirectToProvider']);
Route::get('login/google/callback', [LoginController::class, 'handleProviderCallback']);

问题:
所以我的查询是我想重定向到带有用户角色数据的页面到主页。所以当我在主页上写 {{$role}} 时,它说 $role 是未定义的。我的主要动机是根据用户更改内容页面,但我无法在视图页面中获取数据。它也确实在 URL 中发送了一次数据,但我忘记了那个代码(初学者)所以请告诉我该怎么做。

标签: laravelmodel-view-controller

解决方案


为此使用view()助手

return view('home', ['role' => $user_status->Role]);

或者如果你想重定向然后使用这个

<!-- Main content -->
<section class="content">
    <div class="container-fluid">
        {{  auth()->user()->Role  ?? '' }} // use this
    </div><!-- /.container-fluid -->
</section>

你可以auth()->user()->Role在登录后直接在刀片中使用


推荐阅读