簡體   English   中英

如何在 Laravel 中驗證沒有數據庫的用戶?

[英]How to authenticate user without a DB in Laravel?

我在 Laravel 中創建了一個新項目,該項目使用來自 API 的所有數據。 對於像用戶個人資料這樣的私人數據,我需要一個訪問令牌來獲取數據。

獲得訪問令牌后,如何在 Laravel 中將令牌設置為Auth::id() 或者也許我可以將用戶配置文件存儲為Auth::user()以便我可以在前端刀片文件中使用@auth

class CustomAuthController extends Controller
{
    public function index()
    {
        return view('login');
    }

    public function store(Request $request)
    {
        $request->validate([
            'phone' => 'required|numeric'
        ]);

        $data = [
            'phone' => $request->phone
        ];
        $codeSent = GeneralFunction::WebRequestPublicApi('first-login', $data, null, null, null, true);
        if($codeSent->status == "success")
        {
            return redirect('verify');
        } else {
            $errors = new MessageBag();
            $errors->add("phone", "Invalid phone number");
            return view('login')->withErrors($errors);
        }
    }

    public function showVerify()
    {
        return view('verify');
    }

    public function verify(Request $request)
    {
       try {
            $request->validate([
                'verify' => 'required|size:6'
            ]);
            $data = [
                'token_code' => $request->verify,
                'source' => 'web'
            ];
            $token = GeneralFunction::WebRequestPublicApi('verify-login', $data, null, null, null, true);
            if($token->status === "success")
            {
                $userData  = GeneralFunction::WebRequestPublicApi('membership', null, 'GET', null, null, true,  $token->results->access_token);

                if($userData->status !== "error")
                {
                    $user = (array) $userData->results[0];
                    $request->session()->put('token', $token->results->access_token);
                    Auth::attempt($user, false, false);

                    return redirect('/');
                }
            } else {
                $errors = new MessageBag();
                $errors->add("verify", "Invalid Token");
                return view('verify')->withErrors($errors);
            }
       } catch (Exception $e) {
            $errors = new MessageBag();
            $errors->add("verify", $e->getMessage());
            return view('verify')->withErrors($errors);
       }
    }
}

我嘗試使用Auth::attempt, Auth::login(),和其他方法,但所有這些都需要一個用戶表。 我的項目沒有數據庫。

您可以執行以下操作。

在 controller

if($auth_ok)
{
    session(['user' => ['key' => 'value', 'key2' => 'value2'] ]); // set session data
    return view('frontend');
}

在視圖中

$user = session('user', false);

@if(!$user) // if not logged in

do something

@else // logged in successfully

Welcome my user

@endif

希望這可以幫助。

我想您需要做的最好的事情是使用 sqlite ,一旦您從 api 登錄,就可以從中創建一個新用戶或查找是否已經存在Auth::login($newUser);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM