php - 如何在 Laravel 中验证没有数据库的用户?

标签 php laravel laravel-blade laravel-6 laravel-authentication

我在 Laravel 中创建了一个使用 API 中所有数据的新项目。对于像用户个人资料这样的私有(private)数据,我需要一个访问 token 来获取数据。

获得访问 token 后,如何将 token 设置为 Auth::id()在 Laravel 中?或者我可以将用户配置文件存储为 Auth::user()这样我就可以使用 @auth在前端 Blade 文件中?

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');
}

在 View 中
$user = session('user', false);

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

do something

@else // logged in successfully

Welcome my user

@endif

希望这可以帮助。

关于php - 如何在 Laravel 中验证没有数据库的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58668096/

相关文章:

javascript - Laravel 中 VueJS 组件实现中的鼠标悬停

laravel - 缺少表单操作所需的参数

css - Bootstrap 向右和向左拉动不起作用

php - Laravel: Blade View 中的 undefined variable

php - PDO:查询中的 IF 语句?

php - 为什么中间件不实现接口(interface)?

php - 带url参数的Laravel表单提交

PHP正则表达式从字符串中提取带有模式的url

php - 将重音符号转换为 HTML,但忽略标签

php - Laravel Blade 迭代 php 数组/对象