Laravel 5.2 身份验证 ~ 基于身份验证状态的路由

Laravel 5.2 Authentication ~ Routes Based On Authentication State

我正在尝试做一些我认为很简单的事情,只是遇到了一些麻烦。我下面的代码包括我的 routes.php 和我对用户进行身份验证的 verify.php。基本上,我希望根据用户是否经过身份验证来更改到主页的路由。

所以首先,我有控制器 (verify.php)

<?php
namespace App\Http\Controllers;
use App\Email;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Google_Client; 
use Auth;
use App\User;
class verify extends Controller
{

public function verifyIdToken(Request $request)
  {
$user = User::where('name', 'Molly')->first();
    Auth::login($user);
    return;
}
  }

当用户首次满足某些登录条件时,此脚本会在 ajax 请求中命中,但这是 client-side 逻辑,此时并不重要。这个想法是,一旦脚本被命中,用户就会登录。

要添加更多详细信息:

我的routes.php的header是这样的:

use Auth;
use Illuminate\Http\Request;

有什么我遗漏的吗?

我的 routes.php 逻辑现在是这样的:

if (Auth::guest()) {
    Route::get('/', function () {
        return view('welcome');
    });
} else {
    Route::get('/', function () {
        return view('mainview');
    });
}

但它仍然不起作用,即使在 verify.php 我已经添加了以下确认:

if (Auth::check($user))
{
    return view('aviewII')->with(['verify' => json_encode("Yes!")]);
}

我在 ajax 请求中得到返回。

所以即使这告诉我我已通过身份验证,我仍然无法获得经过身份验证的视图。接下来我应该尝试什么?

编辑:我的 routes.php 全部内容:

<?php

/*
|--------------------------------------------------------------------------
| Routes File
|--------------------------------------------------------------------------
|
| Here is where you will register all of the routes in an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
use App\punsmodel;
use Illuminate\Http\Request;

if (Auth::guest()) {
    Route::get('/', function () {
        return view('welcome');
    });
} else {
    Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
       return view('mainview');
    });

     Route::get('mainview', function ()    {
       return view('mainviewMolly');
    });
});
}

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

Route::post('google' ,  [
    'as' => 'verify.index',
    'uses' => 'verify@verifyIdToken'
]);

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/

Route::group(['middleware' => ['web']], function () {
    //
});

我只是在 routes.php 中有一个条件:

if (Auth::guest()) {
    Route::get('/', function () {
        return view('home.logged_out');
    });
} else {
    Route::get('/', function () {
        return view('home.logged_in');
    });
}

此外,一些造型技巧:

  • 类 应该有“StudlyCased”的名字,所以 class verify 应该是 class Verify.
  • 按字母顺序排列您的 use 语句,使扫描更容易 ;)

更新:

如果您想检查用户的身份验证状态,您需要确保这些路由应用了中间件的组内:

Route::group(['middleware' => 'web'], function () {
    if (Auth::guest()) {
        return view('home.logged_out');
    } else {
        return view('home.logged_in');
    }
});

好的,如果您使用的是 L5.2,这会有点不同。检查 this article.

据我了解,您必须向您的用户 table 添加一个 api_token 字段。然后当你想检查用户是否登录时,你可以这样做 Auth::guard('api')->check().

当您登录用户时,您必须 return 回复中的 api_token 并将此字段添加到任何 Ajax 请求中。

希望对您有所帮助 ;)