亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

使用 Laravel Passport 為你的 REST API 增加用戶(hù)認(rèn)證功能

mudiyouyou / 675人閱讀

摘要:在本教程中,我們將了解如何在應(yīng)用中使用認(rèn)證。當(dāng)用戶(hù)通過(guò)登錄時(shí),會(huì)生成令牌并將其發(fā)送給用戶(hù),該用戶(hù)可用于身份驗(yàn)證。提供,可以毫無(wú)困難地使用認(rèn)證。服務(wù)提供者我們使用的最新版本,它可以使用包發(fā)現(xiàn)并自動(dòng)注冊(cè)服務(wù)。

在本教程中,我們將了解如何在 Laravel 應(yīng)用中使用 laravel passport 認(rèn)證。 我們還將使用 Laravel Passport 認(rèn)證 構(gòu)建一個(gè)簡(jiǎn)單的產(chǎn)品 (創(chuàng)建, 查詢(xún), 更新和刪除 )。

Laravel 已經(jīng)提供了傳統(tǒng)的登錄表單身份驗(yàn)證,但是如果你想使用 APIs 呢?APIs 使用令牌來(lái)驗(yàn)證用戶(hù),因?yàn)樗鼈儾皇褂脮?huì)話(huà)。當(dāng)用戶(hù)通過(guò) API 登錄時(shí),會(huì)生成令牌并將其發(fā)送給用戶(hù),該用戶(hù)可用于身份驗(yàn)證。Laravel 提供 Passport ,可以毫無(wú)困難地使用 API 認(rèn)證。

讓我們看看如何在 Laravel 應(yīng)用程序中設(shè)置和配置用于 API 認(rèn)證和 RESTful APIs 的 Laravel Passport 。

創(chuàng)建一個(gè)新的應(yīng)用

我們新建一個(gè)Laravel 應(yīng)用。 執(zhí)行下面的命令就可以創(chuàng)建一個(gè)全新的laravel應(yīng)用。

composer create-project --prefer-dist laravel/laravel passport
安裝Passport 擴(kuò)展

我們使用composer 安裝Passport 擴(kuò)展。 執(zhí)行下面的命令來(lái)安裝這個(gè)擴(kuò)展。

composer require laravel/passport
Laravel配置Passport

Laravel Passport 擴(kuò)展需要做一些配置。

服務(wù)提供者

我們使用的 Laravel 5.6最新版本,它可以使用包發(fā)現(xiàn)并自動(dòng)注冊(cè)服務(wù)。如果你使用?laravel 5.4 或者 更低版本,你需要在?config/app.php?文件中為Passport注冊(cè)服務(wù)。就這樣,在這個(gè)文件中的providers數(shù)組中添加注冊(cè)服務(wù)。

"providers" => [
    ....
    LaravelPassportPassportServiceProvider::class,
]
遷移和安裝

.env 文件中設(shè)置數(shù)據(jù)庫(kù)憑據(jù)。 Laravel Passport 提供了需要在我們的數(shù)據(jù)庫(kù)中的護(hù)照表的遷移文件。 Passport遷移用于存儲(chǔ)令牌和客戶(hù)端信息。 運(yùn)行migration 命令以將架構(gòu)遷移到數(shù)據(jù)庫(kù)。

php artisan migrate

接下來(lái),需要使用以下命令安裝 Passport。 它將生成生成秘密訪問(wèn)令牌所需的加密密鑰。

php artisan passport:install
Passport 配置

在此步驟中,我們需要在 Laravel 應(yīng)用程序中進(jìn)行更改以完成 Passport 配置。

app/User.php

在你的 ?User?model 中添加?LaravelPassportHasApiTokens?trait 。它將提供一些輔助方法。


AuthServiceProvider

AuthServiceProvider 的引導(dǎo)方法中添加 Passport :: routes() 方法。 它將生成必要的路由。 這是?app/Providers/AuthServiceProvider.php?在更改后的樣子。

 "AppPoliciesModelPolicy",
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}
config/auth.php

在?config/auth.php?文件中,將驅(qū)動(dòng)程序設(shè)置為 passport。

return [
    ....

    "guards" => [
        "web" => [
            "driver" => "session",
            "provider" => "users",
        ],

        "api" => [
            "driver" => "passport",
            "provider" => "users",
        ],
    ],

    ....
]
創(chuàng)建路由

讓我們創(chuàng)建 API 路由,在 routes/api.php?添加路由。

Route::post("login", "PassportController@login");
Route::post("register", "PassportController@register");

Route::middleware("auth:api")->group(function () {
    Route::get("user", "PassportController@details");

    Route::resource("products", "ProductController");
});
創(chuàng)建認(rèn)證控制器

讓我們?cè)O(shè)置身份驗(yàn)證邏輯。通過(guò)運(yùn)行以下命令創(chuàng)建 Passport 控制器。

php artisan make:controller PassportController

將以下代碼復(fù)制到?app/Http/Controllers/PassportController.php

validate($request, [
            "name" => "required|min:3",
            "email" => "required|email|unique:users",
            "password" => "required|min:6",
        ]);

        $user = User::create([
            "name" => $request->name,
            "email" => $request->email,
            "password" => bcrypt($request->password)
        ]);

        $token = $user->createToken("TutsForWeb")->accessToken;

        return response()->json(["token" => $token], 200);
    }

    /**
     * Handles Login Request
     *
     * @param Request $request
     * @return IlluminateHttpJsonResponse
     */
    public function login(Request $request)
    {
        $credentials = [
            "email" => $request->email,
            "password" => $request->password
        ];

        if (auth()->attempt($credentials)) {
            $token = auth()->user()->createToken("TutsForWeb")->accessToken;
            return response()->json(["token" => $token], 200);
        } else {
            return response()->json(["error" => "UnAuthorised"], 401);
        }
    }

    /**
     * Returns Authenticated User Details
     *
     * @return IlluminateHttpJsonResponse
     */
    public function details()
    {
        return response()->json(["user" => auth()->user()], 200);
    }
}

讓我來(lái)解釋一下上面的代碼

在?register?的方法中,我們驗(yàn)證請(qǐng)求數(shù)據(jù)然后創(chuàng)建用戶(hù)。我們使用 ?createToken?方法創(chuàng)建 token,并將名稱(chēng)作為參數(shù)傳遞。最后,我們?cè)?JSON 響應(yīng)中返回 token。

在 ?login?方法中,我們嘗試使用請(qǐng)求參數(shù)進(jìn)行身份驗(yàn)證。然后,根據(jù)嘗試的成功或失敗返回適當(dāng)?shù)捻憫?yīng)。

在?details?方法中我們只返回用戶(hù)模型。

創(chuàng)建產(chǎn)品 CRUD

讓我們創(chuàng)建一個(gè)產(chǎn)品的 CRUD。運(yùn)行以下命令生成產(chǎn)品模型、遷移文件、和控制器。

php artisan make:model Product -mc

它將創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)遷移文件?create_products_table.php?在?database/migrations?文件夾.
將?up?方法更新成以下代碼。

public function up()
{
    Schema::create("products", function (Blueprint $table) {
        $table->increments("id");
        $table->integer("user_id");
        $table->string("name");
        $table->integer("price");
        $table->timestamps();

        $table->foreign("user_id")
            ->references("id")
            ->on("users");
    });
}

現(xiàn)在, 添加?fillable?屬性到?Product?模型. 打開(kāi)?app 文件夾下的?Product.php?文件.


現(xiàn)在我們運(yùn)行數(shù)據(jù)遷移。

php artisan migrate

現(xiàn)在,讓我們?cè)?app/User.php?文件中添加關(guān)聯(lián)關(guān)系方法。

public function products()
{
    return $this->hasMany(Product::class);
}

打開(kāi)?app/Http/Controllers 文件夾中的?ProductController.php?文件。復(fù)制以下代碼到到產(chǎn)品控制器。

user()->products;

        return response()->json([
            "success" => true,
            "data" => $products
        ]);
    }

    public function show($id)
    {
        $product = auth()->user()->products()->find($id);

        if (!$product) {
            return response()->json([
                "success" => false,
                "message" => "Product with id " . $id . " not found"
            ], 400);
        }

        return response()->json([
            "success" => true,
            "data" => $product->toArray()
        ], 400);
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            "name" => "required",
            "price" => "required|integer"
        ]);

        $product = new Product();
        $product->name = $request->name;
        $product->price = $request->price;

        if (auth()->user()->products()->save($product))
            return response()->json([
                "success" => true,
                "data" => $product->toArray()
            ]);
        else
            return response()->json([
                "success" => false,
                "message" => "Product could not be added"
            ], 500);
    }

    public function update(Request $request, $id)
    {
        $product = auth()->user()->products()->find($id);

        if (!$product) {
            return response()->json([
                "success" => false,
                "message" => "Product with id " . $id . " not found"
            ], 400);
        }

        $updated = $product->fill($request->all())->save();

        if ($updated)
            return response()->json([
                "success" => true
            ]);
        else
            return response()->json([
                "success" => false,
                "message" => "Product could not be updated"
            ], 500);
    }

    public function destroy($id)
    {
        $product = auth()->user()->products()->find($id);

        if (!$product) {
            return response()->json([
                "success" => false,
                "message" => "Product with id " . $id . " not found"
            ], 400);
        }

        if ($product->delete()) {
            return response()->json([
                "success" => true
            ]);
        } else {
            return response()->json([
                "success" => false,
                "message" => "Product could not be deleted"
            ], 500);
        }
    }
}
測(cè)試

現(xiàn)在,我們的邏輯已經(jīng)完成,讓我們開(kāi)始測(cè)試。 我們將在 PHP 開(kāi)發(fā)服務(wù)器上測(cè)試它,但你可以根據(jù)需要使用虛擬主機(jī)。 運(yùn)行以下命令以在 PHP 開(kāi)發(fā)服務(wù)器上提供應(yīng)用程序。

php artisan serve

現(xiàn)在讓我們用測(cè)試工具測(cè)試我們的API?Postman.

注冊(cè)接口

登陸接口

詳情接口

在測(cè)試詳情接口或需要用戶(hù)進(jìn)行身份驗(yàn)證的任何 API 時(shí),你需要指定兩個(gè)標(biāo)頭請(qǐng)求頭信息。 你必須在 Authorization 請(qǐng)求頭中將 token 指定為 Bearer token。 基本上,你必須將登錄和注冊(cè)后收到的 token 拼到 Bearer 后面,當(dāng)中空一個(gè)空格。

"headers" => [
    "Accept" => "application/json",
    "Authorization" => "Bearer ". $accessToken,
]

產(chǎn)品列表接口

產(chǎn)品添加接口

產(chǎn)品展示接口

產(chǎn)品更新接口

產(chǎn)品刪除接口

本教程的完整代碼可以從 github 獲取?GitHub

文章轉(zhuǎn)自:https://learnku.com/laravel/t... 

更多文章:https://learnku.com/laravel/c...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/31408.html

相關(guān)文章

  • PHP / Laravel API 開(kāi)發(fā)推薦閱讀清單

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開(kāi)發(fā) API 實(shí)戰(zhàn),讓 API 開(kāi)發(fā)更省心 - 自造車(chē)輪。 API 文檔神器 Swagger 介紹及在 PHP 項(xiàng)目中使用 - API 文檔撰寫(xiě)方案 推薦 Laravel API 項(xiàng)目必須使用的 8 個(gè)...

    shmily 評(píng)論0 收藏0
  • Laravel使用Passport來(lái)創(chuàng)建API用戶(hù)認(rèn)證

    摘要:本文來(lái)自原文鏈接歡迎作客我們的學(xué)習(xí)群比如說(shuō)你要給你的手機(jī)用戶(hù)創(chuàng)建,使用的是你已有的系統(tǒng)里的數(shù)據(jù)庫(kù),尤其是用戶(hù)數(shù)據(jù)。 本文來(lái)自pilishen.com----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050 比如說(shuō)你要給你的手機(jī)APP用戶(hù)創(chuàng)建API,使用的是你已有的Laravel系統(tǒng)里的數(shù)據(jù)庫(kù),尤其是用戶(hù)數(shù)據(jù)?,F(xiàn)在我們來(lái)看一下,這里使用的是Laravel Pas...

    TwIStOy 評(píng)論0 收藏0
  • laravel/passport實(shí)現(xiàn)API認(rèn)證Laravel5.6)

    摘要:第一部分安裝第一步使用安裝第二步服務(wù)提供器使用框架注冊(cè)自己的數(shù)據(jù)庫(kù)遷移目錄,因此在注冊(cè)提供器后,就應(yīng)該運(yùn)行的遷移命令來(lái)自動(dòng)創(chuàng)建存儲(chǔ)客戶(hù)端和令牌的數(shù)據(jù)表第三步接下來(lái),運(yùn)行命令來(lái)創(chuàng)建生成安全訪問(wèn)令牌時(shí)所需的加密密鑰,同時(shí),這條命令也會(huì)創(chuàng)建用于生 第一部分 安裝Passport(laravel/passport) 第一步. 使用 Composer 安裝 Passport :composer...

    huayeluoliuhen 評(píng)論0 收藏0
  • Laravel Passport里的授權(quán)類(lèi)型介紹

    摘要:模糊授權(quán),跟上面的認(rèn)證碼授權(quán)類(lèi)似,不同的是,我們的資源服務(wù)器,返回的直接就是準(zhǔn)入令牌,而不是認(rèn)證碼。 本文來(lái)自pilishen.com----原文鏈接; 歡迎來(lái)和pilishen一起學(xué)習(xí)php&Laravel;學(xué)習(xí)群:109256050 OAuth2是一個(gè)安全框架,控制著程序受保護(hù)部分的準(zhǔn)入,主要是控制不同的客戶(hù)端如何來(lái)調(diào)取API,保證它們?cè)谡?qǐng)求相應(yīng)資源的時(shí)候有相應(yīng)的權(quán)限。 Larav...

    RobinTang 評(píng)論0 收藏0
  • Laravel 5.5 使用 Passport 實(shí)現(xiàn) Auth 認(rèn)證

    摘要:最近在寫(xiě)一個(gè)前后端分離項(xiàng)目,本來(lái)想用開(kāi)發(fā)的,但是略感笨重,于是想到了的和新出的。更改看守器驅(qū)動(dòng)將配置文件中授權(quán)看守器的的選項(xiàng)改為。然后在你的前端請(qǐng)求里需要加入一個(gè)參數(shù)然后在你需要使用到認(rèn)證的路由里使用中間件,一切就大功告成啦 最近在寫(xiě)一個(gè)前后端分離項(xiàng)目,本來(lái)想用 Jwt-auth + Dingo 開(kāi)發(fā)的,但是略感笨重,于是想到了 Laravel 的 Passport 和 5.5 新出的...

    miguel.jiang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<