Laravel(5.4)护照路线与当前用户,如果没有登录也可以工作

时间:2017-07-27 14:47:11

标签: laravel api authentication laravel-passport

我正在尝试在laravel中制作一条路线,如果用户已登录但可以使用,但如果没有则可以使用。

在我的情况下,我有一个名为“场地”的桌子和一个可以将场地作为他最喜欢的“用户”。

所以这些是我的路线:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="preferExternal"
    package="com.Company.ProductName"
    android:versionName="1.0"
    android:versionCode="1">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application>

        <!-- IronSource -->
        <activity android:name = "com.ironsource.sdk.controller.ControllerActivity"
        android:configChanges="orientation|screenSize"
        android:hardwareAccelerated="true"/>
        <activity android:name = "com.ironsource.sdk.controller.InterstitialActivity"
        android:configChanges="orientation|screenSize"
        android:hardwareAccelerated="true"
        android:theme="@android:style/Theme.Translucent"/>
        <activity android:name="com.ironsource.sdk.controller.OpenUrlActivity"
        android:configChanges="orientation|screenSize"
        android:hardwareAccelerated="true"
        android:theme="@android:style/Theme.Translucent" />

        <!-- Vungle -->
        <activity android:name="com.vungle.publisher.VideoFullScreenAdActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
        <activity android:name="com.vungle.publisher.MraidFullScreenAdActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

    </application>
</manifest>

现在我注意到Route::group(['middleware' => ['cors', 'bindings', 'auth:api']], function () { Route::match(['GET', 'OPTIONS'], 'venue/{venue}', 'VenuesController@getVenue')->name('venue')->where('venue', '[0-9]+'); }); Route::group(['middleware' => ['cors', 'bindings', 'api'], 'namespace' => 'Api'], function () { Route::match(['GET', 'OPTIONS'], 'venue/{venue}', 'VenuesController@getVenue')->name('venue')->where('venue', '[0-9]+'); }); 仅在具有Auth::user();的中间件的路线中可用,但如果用户未登录,我还希望它能够到达场地。并且使用两个组都没有这样做。

My Venue模型如下所示:

'auth:api'

必须有更好的方法来做到这一点。

我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

好的,我终于找到了自己问题的答案。 显然,获取Passport当前的正确方法是:

$user = auth()->guard('api')->user(); 

Auth::user()仅适用于中间位置为'auth:api'的路线,但如果我这么说的话,这个路线在任何地方都可用。

如果我错了,请随意纠正我:)