国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

mudiyouyou / 625人閱讀

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

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

Laravel 已經(jīng)提供了傳統(tǒng)的登錄表單身份驗(yàn)證,但是如果你想使用 APIs 呢?APIs 使用令牌來驗(yàn)證用戶,因?yàn)樗鼈儾皇褂脮?huì)話。當(dāng)用戶通過 API 登錄時(shí),會(huì)生成令牌并將其發(fā)送給用戶,該用戶可用于身份驗(yàn)證。Laravel 提供 Passport ,可以毫無困難地使用 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í)行下面的命令來安裝這個(gè)擴(kuò)展。

composer require laravel/passport
Laravel配置Passport

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

服務(wù)提供者

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

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

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

php artisan migrate

接下來,需要使用以下命令安裝 Passport。 它將生成生成秘密訪問令牌所需的加密密鑰。

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)證控制器

讓我們設(shè)置身份驗(yàn)證邏輯。通過運(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);
    }
}

讓我來解釋一下上面的代碼

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

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

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

創(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ù)庫遷移文件?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?模型. 打開?app 文件夾下的?Product.php?文件.


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

php artisan migrate

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

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

打開?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);
        }
    }
}
測試

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

php artisan serve

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

注冊接口

登陸接口

詳情接口

在測試詳情接口或需要用戶進(jìn)行身份驗(yàn)證的任何 API 時(shí),你需要指定兩個(gè)標(biāo)頭請求頭信息。 你必須在 Authorization 請求頭中將 token 指定為 Bearer token。 基本上,你必須將登錄和注冊后收到的 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31408.html

相關(guān)文章

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

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

    shmily 評論0 收藏0
  • Laravel使用Passport來創(chuàng)建API用戶認(rèn)證

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

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

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

    huayeluoliuhen 評論0 收藏0
  • Laravel Passport里的授權(quán)類型介紹

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

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

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

    miguel.jiang 評論0 收藏0

發(fā)表評論

0條評論

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