0.0.6
Authentication plugin for Fresh(Deno) using Lucia
Repository
Current version released
10 months ago
Dependencies
deno.land/x
other
Plantation 🍋
Authentication plugin for Fresh(Deno) using Lucia.
Plantation is inspired by devise. Combining plantation with fresh provides the ability to create accounts, log in and log out.
Usage
fresh.config.ts
import { defineConfig } from "$fresh/server.ts";
import tailwind from "$fresh/plugins/tailwind.ts";
import {
emailSchema,
getPlantationWithCsrfPlugins,
passwordSchema,
} from "plantation/mod.ts";
import { auth } from "./utils/lucia.ts";
export default defineConfig({
plugins: [
tailwind(),
...(await getPlantationWithCsrfPlugins(
{
csrf: {
kv: await Deno.openKv(),
encryptKey: Deno.env.get("FRESH_CSRF_ENCRYPT_KEY")!, // <= string length of 32, ex. 12345678901234567890123456789012
key: Deno.env.get("FRESH_CSRF_KEY")!, // <= string length of 32, ex. 01234567012345670123456701234567
salt: Number(Deno.env.get("FRESH_CSRF_SALT!")!), // ex. 123
},
plantationParams: {
setupRootPath: "/",
auth: auth,
allowNoSessionPaths: [],
resourceName: "user",
resourceIdentifierName: "email",
loginAfterPath: "/must_login",
logoutAfterPath: "/",
identifierSchema: emailSchema,
passwordSchema: passwordSchema,
},
},
)),
],
});
Permission
- read
- write(when doing cli)
Use of authentication information
user
Resource authenticated information can be obtained as follows.
import { LogoutForm } from "../../mod.ts";
import type { WithPlantation } from "../../mod.ts";
import type { PageProps } from "$fresh/server.ts";
export default function MustLogin(
props: PageProps<unknown, WithPlantation<"user">>,
) {
return (
<div class="px-4 py-8 mx-auto bg-[#86efac]">
<div class="max-w-screen-md mx-auto flex flex-col items-center justify-center">
MUST LOGIN
<p>
{props.state.plantation.authUserSession.resourceName}
id :{props.state.plantation.authUserSession.user.userId}
</p>
</div>
</div>
);
}
In the case of user
, the ID of the resource can be obtained as in
props.state.plantation.authUserSession.user.userId
.
Similarly, the handler can also retrieve this.
export const handler = {
GET(req: Request, ctx: FreshContext<WithPlantation<"user">>) {
// ex. get user id
// ctx.state.plantation.authUserSession.user.userId
return ctx.render();
},
};
Custom handler and component
You can use the cli tool to build your own handlers and components.
$ deno run --allow-write --allow-net https://deno.land/x/plantation/cli.ts user
Create File: ./plantation/user/create.tsx
Create File: ./plantation/user/login.tsx
Create File: ./plantation/user/logout.tsx
When using the user resource, set resourceName: "user"
.
At this time, if plantation/user/create.tsx(login.tsx, logout.tsx) is available,
it is referenced first.
Use this for your own customization of CSS or for more detailed customization.